我正在尝试使用vuejs2创建一个简单的产品目录。
我的所有数据都存储在一个对象数组中,然后我有一个数据的子集,这是产品目录用来显示每个产品的部分。该子集用于分页。
当用户切换页面时,它会清除并将下一组数据推送到数组中。
这会自动使产品组件显示新数据。
我遇到以下问题,每个产品都有多种颜色,存储为逗号分隔的字符串,例如(白色,蓝色,红色)
我正在努力使这些信息显示为每个产品旁边的选项下拉列表。
这一直有效,直到我切换到下一页数据,所有其他细节都会更新,但颜色下拉除外,它只反映上一组数据。
我的产品列表存储在对象数组中,如:
var obj = {
productID: productID,
product: title,
gender: gender,
colour: colour,
cost: cost,
size: size,
description: description
}
productArray.push(obj);
然后我有几个组件显示这个数据数组:
Vue.component('product-list', {
template: '<ul id="productList">'+
'<product :productID="product.productID" v-for="product in products">'+
'<h4>Colour</h4><colourSelect :colours="product.colour" :productID="product.productID"></colourSelect>' +
'<h4>Gender</h4><span class="genderSpan"><p v-bind:id="getID(product.productID)">{{product.gender}}</p></span>' +
'</product></ul>',
data: function() {
return {
products:
paginatedArray
};
},
Vue.component('colourSelect', {
props: ['productID', 'colours'],
template: '<select v-bind:id="getID()" class="form-control input-xs"><colourOption v-for="colourItem in colourArray"></colourOption></select>',
data: function () { //split string based into array
var newArray = [];
var optionsArray = this.colours.split(',');
for (i = 0; i < optionsArray.length; i++) {
var obj = {
colour: optionsArray[i]
}
newArray.push(obj)
}
return {
colourArray: newArray
};
},
methods: {
getID: function (test) {
return 'colourSelect' + this.productID;
}
}
});
Vue.component('colourOption', {
props:['options'],
template: '<option><slot></slot></option>'
});
在vuejs的app部分中,我有以下方法进行分页:
buildPages: function () {
for (i = 1; i < this.listLength() /this.totalPage ; i++) {
this.pages.push(i);
}
var page = this.currentPage * this.totalPage;
for (i = page; i < page + this.totalPage ; i++) {
paginatedArray.push(productArray[i]);
}
},
listLength: function () {
var listTotal = productArray.length;
return listTotal
},
changePage: function (number) {
this.currentPage = number
var page = this.currentPage * this.totalPage;
//paginatedArray = [];
var count = 0;
for (i = page; i < page + this.totalPage ; i++) {
if (typeof productArray[i] !== 'undefined') {
paginatedArray.splice(count, 1, productArray[i])
}
count++
}
},
productArray是存储数据的主要数组,paginatedArray是产品组件处理的数据子集。
问题似乎在colourSelect组件中,在其“数据”部分中,它会分割颜色数据并将其作为colourOption组件返回到select中,但在paginatedArray更改时不会更新。
然而,当getID方法正确更新时,colourSelect组件似乎实际上传递了正确的数据。它只是没有重新运行的数据部分。
这是我的第一个vuejs网站,任何人对此有什么想法?
由于
答案 0 :(得分:0)
您应该将colourArray
作为计算属性,因为组件的data
块只执行一次,以后更改道具不会更新colourArray
。
Vue.component('colourSelect', {
props: ['productID', 'colours'],
template: '<select v-bind:id="getID()" class="form-control input-xs"><colourOption v-for="colourItem in colourArray"></colourOption></select>',
computed:{
colourArray: function () { //split string based into array
var newArray = [];
var optionsArray = this.colours.split(',');
for (i = 0; i < optionsArray.length; i++) {
var obj = {
colour: optionsArray[i]
}
newArray.push(obj)
}
return newArray
}
},
methods: {
getID: function (test) {
return 'colourSelect' + this.productID;
}
}
});