2017-08-07 47 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