【发布时间】:2016-10-17 15:34:42
【问题描述】:
最近在循环创建Vue组件时遇到了一个连线问题。
for(let i=0;i<testInfo.length;i++)
{
$("#home").append("<lib_" + testInfo[i]['lib_id'] + "></lib_" + testInfo[i]['lib_id'] + ">");
console.log(i);
Vue.component('lib_' + testInfo[i]['lib_id'], {
template: '#' + testInfo[i]['lib_id'],
created: function () {
this.count=i;
this.libTitle=testInfo[i]['lib_title'];
this.row=testInfo[i]['row'];
this.imgUrl=testInfo[i]['img_url'];
alert(i);
this.itemUrl=testInfo[i]['item_url'];
this.libNum=testInfo[i]['lib_num'];
this.libNumMax=testInfo[i]['lib_num_max'];
},
data: function(){
}
});
}
new Vue({
el: '#home'
});
console.log(i) 的结果:0 1 2 这是正常的 但是 alert(i) : 0 2 2 的结果是连线的。
一开始,我以为是在循环中创建闭包的问题,所以我将“var i”改为“let i”,但它不起作用。
然后,我将代码更改如下
for(let i=0;i<testInfo.length;i++)
{
$("#home").append("<lib_" + testInfo[i]['lib_id'] + "></lib_" + testInfo[i]['lib_id'] + ">");
console.log(i);
Vue.component('lib_' + testInfo[i]['lib_id'], {
template: '#' + testInfo[i]['lib_id'],
created: function () {
this.count=i;
this.libTitle=testInfo[i]['lib_title'];
this.row=testInfo[i]['row'];
this.imgUrl=testInfo[i]['img_url'];
alert(i);
this.itemUrl=testInfo[i]['item_url'];
this.libNum=testInfo[i]['lib_num'];
this.libNumMax=testInfo[i]['lib_num_max'];
}(i),
data: function(){
}
});
} new Vue({
el: '#home'
});
现在 alert(i) 结果正确:0 1 2
但是“this”关键字指的是“window object”而不是“new vue object”。
这个问题让我抓狂......请帮忙。
【问题讨论】:
标签: loops components vue.js