2017-08-07 74 views
0

渲染對象我有一個jsonArray,在我的模板組件具有V-像:變化值和V-的Vuejs

<div v-for="obj in data.objects" :key="obj.id"> 
    <strong>Quota:</strong> 
     <span>{{obj.quota}}</span> 
</div> 

而且我在我的組件的功能應該改變obj的價值。配額點擊按鈕後,如:

refreshValue: function(element){ 
    this.data.objects.forEach((e, i) => { 
     if (e.id == element.id) { 
     this.data.objects[i].quota = e.fractionNuminator /e.fractionDenominator; 
     } 
    }); 
} 

但問題是對象不刷新,而不是渲染對象的新的價值。

我錯了什麼?我應該如何改變v-for的價值?

謝謝!

+0

使用時總是''加key' V-for' –

+0

OK謝謝你們的提醒 – LorenzoBerti

+1

這是因爲由於JS是如何實現的,VueJS不能觀看動態更改數組中的元素。改爲在循環的每次迭代中使用'Vue.set':https://vuejs.org/v2/guide/list.html#Caveats – Terry

回答

0

我能夠在this jsFiddle中得到這個工作。

<div id="vue-instance"> 
    <div v-for="obj in objects"> 
    <strong>Quota:</strong> 
    <span>{{obj.quota}}</span> 
    <button @click="refreshValue(obj)">Refresh!</button> 
    </div> 
</div> 

var vm = new Vue({ 
    el: '#vue-instance', 
    data: { 
    objects: [ 
     {id: 1, quota: 100, numerator: 1, denominator: 3}, 
     {id: 2, quota: 120, numerator: 2, denominator: 5}, 
     {id: 3, quota: 75, numerator: 5, denominator: 6}, 
     {id: 4, quota: 350, numerator: 3, denominator: 8} 
    ] 
    }, 
    methods: { 
    refreshValue: function(element) { 
     this.objects.forEach((e, i) => { 
     if (e.id == element.id) { 
      this.objects[i].quota = e.numerator /e.denominator; 
     } 
     }); 
    } 
    } 
}) 
+0

謝謝,我明白了,問題可能是我有一個對象?所以我的數組對象實際上是在 data.objects等,它沒有在數據{}中初始化? – LorenzoBerti

+0

@LorenzoBerti,'objects'在'data'內,但是你直接在模板中用'objects',而不是'data.objects'來訪問它。另外,如果你在一個組件中工作,'data'必須是一個函數而不是一個對象:https://vuejs.org/v2/api/#data – MattDionis