大概 HTML:
<div id="productSelect">
<li v-bind:class="{'active' : item.selected}" v-for="(item, index) in list" @click="selectItem(index)">{{item.name}}</li>
</div>
JS:
var productChoice = new Vue({
el: "#productSelect",
data: {
list: []
},
created: function() {
this.loadDate();
},
methods: {
loadDate: function () {
//AJAX, 成功后传一个 Array 给 printProductList
this.printProductList(arr);
},
selectItem: function(i) {
this.list[i].selected = !(this.list[i].selected);
},
printProductList: function(arr) {
let list = [];
for(x in arr) {
//经过某从筛选,通过的 push 到 list
arr[x].selected = false; //每个条目中原先是没有 selected 这个属性的,这里加上去
list.push(arr[x]);
}
this.list = list;
}
})
神奇的地方在于,如果直接写死 data.list 就能实现 class 的绑定,但是经过一系列处理之后赋值过去的 Array,虽然渲染得出来,但是通过点击来处理 class 的绑定就无效了。