您的位置:首页 > Web前端 > Vue.js

vue用api获取直接赋值的数组为什么没有渲染在前端

2018-08-16 16:14 260 查看

通过vux绑定的panel组件渲染前端

[code]<panel :list="list" :type="type"></panel>
[code]export default {
data () {
return {
type: '5',
list: []
}
},
}
[code]submit () {
back.ChargeRec(this.params).then((response) => {
if (this.params.page <= response.data.pages) {
var sets = this.list
if (response.data !== undefined) {
for (let i = alsize; i < response.data.size; i++) {
let groupinfo = {}
let ingroup = []
ingroup.other = response.data.record[i].power
ingroup.date = response.data.record[i].time
groupinfo.title =response.data.record[i].cost
groupinfo.src = 'https://timgsa.baidu.com/20041_IBI.png'
groupinfo.desc =response.data.record[i].duration
groupinfo.meta = ingroup
sets[i] = groupinfo
}
}
this.list = sets
console.log(this.list)
})
}

 

其中我panel所需要的数据是以这样的方式传递至panel之中,

然而数据并未渲染在前端。

同时,控制台打印出来的this.list显示已经拿到数据了。

 

最后师兄研究了很久,在vue官方文档中发现如下内容:

由于 JavaScript 的限制,Vue 不能检测以下变动的数组:

  1. 当你利用索引直接设置一个项时,例如:
    vm.items[indexOfItem] = newValue
  2. 当你修改数组的长度时,例如:
    vm.items.length = newLength

举个例子:

var vm = new Vue({
data: {
items: ['a', 'b', 'c']
}
})
vm.items[1] = 'x' // 不是响应性的
vm.items.length = 2 // 不是响应性的

为了解决第一类问题,以下两种方式都可以实现和 

vm.items[indexOfItem] = newValue
 相同的效果,同时也将触发状态更新:

// Vue.set
Vue.set(vm.items, indexOfItem, newValue)
// Array.prototype.splice
vm.items.splice(indexOfItem, 1, newValue)

你也可以使用 

vm.$set
 实例方法,该方法是全局方法 
Vue.set
 的一个别名:

vm.$set(vm.items, indexOfItem, newValue)

为了解决第二类问题,你可以使用 

splice

vm.items.splice(newLength)

 

根据上方所得,我之前将sets的指针直接指向this.list,所进行的数据填充是在list直接填充,而vue不会对变化的数组进行响应。因此进行如下改变:

[code]//var sets = this.list

var sets = this.list.slice(0) //改为此行
阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐