2017-08-04 7 views
0

画像をアップロードするときに画像プレビューを作成したいと思います。Vue Jsが更新された配列で初めてDOMを更新しない

イメージのパスを配列で取得できましたが、イメージをアップロードするときに配列が最初に更新されません。

vue devtoolsをチェックすると、アレイが更新されますが、イメージはプレビューされません。

イメージをアップロードすると、アレイはすぐに更新されます。しかしそれは更新されません。

私のアレイをvue devtoolsで表示すると、アレイは更新されます。ここで

は私のコードは次のとおりです。ここ

export default { 

data() { 
     return { 
      items: [], 
      itemsAdded: '', 
      itemsNames: [], 
      itemsSizes: [], 
      itemsImages: [], 
      itemsTotalSize: '', 
      formData: '', 
     }, 
     methods: { 
      onChange(e) { 
      this.successMsg = ''; 
      this.errorMsg = ''; 
      this.formData = new FormData(); 
      let files = e.target.files || e.dataTransfer.files; 
      this.itemsAdded = files.length; 
      let fileSizes = 0; 
      var vm = this; 
      for (let x in files) { 
       if (!isNaN(x)) { 
        this.items = e.target.files[x] || 
        e.dataTransfer.files[x]; 
        this.itemsNames[x] = files[x].name; 
        this.itemsSizes[x] = this.bytesToSize(files[x].size); 
        fileSizes += files[x].size; 

        var reader = new FileReader(); 
        reader.onload = (event) => { 
         vm.itemsImages[x] = event.target.result; 
        }; 
        reader.readAsDataURL(files[x]); 
        this.formData.append('items[]', this.items); 

       } 
      } 
      this.itemsTotalSize = this.bytesToSize(fileSizes); 
     }, 

    }, 

} 

HTML

<div class='row'> 
    <div v-for="item in itemsImages">{{item}}</div> 
</div> 

スクリプトはスクリーンショットです: enter image description here

+1

[Vue.js - 更新された配列アイテムの値がページで更新されません](https://stackoverflow.com/questions/44800470/vue-js-updated-array-item-value-doesnt-update) -in-page) – choasia

答えて

1

これは通常、配列が更​​新されますが、Vueに通知されないため再描画されないため、反応性の問題です。

あなたの配列が変化した場合に通知するようだと、それはここで変更されます。

vm.itemsImages[x] = event.target.result; 

あなたはこの時点でプロパティxを設定しているが、Vueのはゲッターを作成していないため、Vueのは、この上で拾うことはありません初期化後に追加するプロパティの設定を行います。

あなたはVueのは、このアレイ上の変化に対応できるようにしたいとあなたが動的にプロパティを設定する必要がある場合は、あなたが必要とする:

https://vuejs.org/v2/api/#Vue-set

だから、これは次のようになりますthis.$set(vm.itemsImages, x, event.target.result)

これで問題が解決するはずです。それが動作しない場合は教えてください。

+1

チャームのように働いた!!助けてくれてありがとう@ Stephan-v – WahidSherief

関連する問題