大概 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 的绑定就无效了。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.