簡體   English   中英

頁面重新加載后保留錯誤數組

[英]Persist errors array after page reload

我現在正在嘗試建立一個人生成的所有二維碼的歷史記錄,將代碼保存到本地存儲,然后循環訪問本地存儲並在頁面上顯示這些代碼。

我希望創建代碼的日期顯示在代碼旁邊,作為“項目符號”。

所以我試圖在 Javascript 中創建一個多維數組,其中包含一個包含鍵值屬性的 object,其中鍵是日期,但是當我 output 這個鍵在頁面上使用時我得到的文字字符串 'today' 應該是我打算擁有的 'dd/mm/yyyy' 日期。 @OhGodWhy,也許您可以在這里提供幫助?

index.html//

    <!DOCTYPE html>
    <html>
    <head>
    <title>QR Code Generator</title>
    <link rel="stylesheet" type="text/css" media="screen" 
    href="css/bootstrap.css">
    <link rel="stylesheet" type="text/css" media="screen" 
    href="css/styles.css">
    <script type="text/javascript" href="js/bootstrap.js"></script>
    </head>
    <body>
    <div class="container">
        <div id="input-form">
            <h1>QR Code Generator</h1>
            <div class="row qr_code">
                <span v-show="errors" class="error">
                Please ensure that at least one of the form fields is filled 
    in.
                </span>
            </div>
            <form class="row qr_code">
                <div class="col-sm-3">
                    <input v-on:click="generate_url" class="btn btn-success" 
    value="Generate QR Code">
                </div>
                <div class="col-sm-3">
                    <label for="url-link" name="url-link">URL:</label>
                    <input type="text" v-model="url" id="url-link" 
    class="url-link">
                </div>
                <div class="col-sm-3">
                    <label for="pixel_size" name="pixel_size">Pixels: 
   </label>
                    <input type="text" v-model="pixel_size" id="pixel_size" 
    class="pixel_size">
                </div>
                <div class="col-sm-2">
                    <label for="transparent" name="transparent">Transparent? 
   </label>
                    <input type="checkbox" v-model="transparent" 
    id="transparent" class="transparent" true-value="transparent" false- 
   value="">
                </div>
                <div class="col-sm-1">
                    <select v-on:change="on_change(this.value)" v- 
   model="image_type" class="dropdown">
                        <option value="png">PNG Image</option>
                        <option value="svg">SVG Image</option>
                    </select>
                </div>
            </form>
            <div class="row generated-code">
                <div class="col-sm-12">
                    <p class="generated-code">Generated Code: <span v- 
   show="show_url" class="generated-qr-code">
                </div>
            </div>
            <div class="row">
                <div class="col-sm-12">
                    <h2>QR Code History</h2>
                    <ul v-for="(url in url_log">
                        <li>{{ url }}</li>
                    </ul>
                </div>
            </div>
        </div>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.13/dist/vue.js"> 
   </script>
    <script src="app.js"></script>
    </body>
    </html>

// 應用程序.js

    const app = new Vue({
      el: '#input-form',
      data: {
    url: "",
    pixel_size: "",
    transparent: "",
    image_type: "",
    show_url: false,
    errors: false,
    url_log: []
      },
       methods: {
    generate_url: function(){
        if (!this.url && !this.pixel_size && !this.transparent && 
    !this.image_type){
          this.errors = true;
      } else {
        this.show_url = true;
        var url = 'https://qrtag.net/api/qr_' + this.transparent + '_' + 
    this.pixel_size + '.' + this.image_type + '?url=' + this.url;
        localStorage.setItem('url', url);
        var today = new Date();
        var dd = String(today.getDate()).padStart(2, '0');
        var mm = String(today.getMonth() + 1).padStart(2, '0'); //January is 
    0!
        var yyyy = today.getFullYear();

        today = mm + '/' + dd + '/' + yyyy;
        if (localStorage.getItem('url')){
          this.url_log.push({today: localStorage.getItem('url')});
        }
        console.log(this.url_log);
      }
    },
    on_change: function(value){
      console.log(value);
    }
      },
      mounted() {
    console.log('App mounted!');

     }
    });

您可以使用簡單的本地存儲解決方案將它們臨時存儲在那里。 但是請注意,您應該同時處理它的創建清理。 下面你可以看到一個簡單的例子:

methods: {
  synchronize_errors: (field, name) {
    const errors = localStorage.getItem('errors') || {}

    errors[field] = name

    localStorage.setItem('errors', errors)
  }
}

然后你可以在指定的方法中使用它:

mounted: function () {
  const errors = localStorage.getItem('errors') || {}

  Object.keys(errors).forEach((field) => {
    this.errors.push(errors[error])
  })
}

現在清理有點困難,但你可以做一些簡單的事情:

beforeDestroy: function () {
  localStorage.removeItem('errors')
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM