美文网首页
列表渲染中的更新

列表渲染中的更新

作者: SnuggleE | 来源:发表于2019-03-23 15:49 被阅读0次

vue中会遇到这种问题,使用列表渲染v-for渲染出来的内容,想更新的时候,页面上却没有更新,

比如现在有一个list

var list = [{a:1},{a:2},{a:3},..]

<p v-for="item in list" :key="item.a">{{item.a}}</p>

那么渲染结果应该是这样:

示例

嗯,就是这样。

但在此时,如果要更新某一条记录的值,可能会执行这条语句:

list[0].a = 5555

此时问题出现了:

页面没有更新,vue不是数据双向绑定吗?

没错,vue是数据双向绑定,但是仔细观察可以得到,更新的不是一个变量,而是数组里面的对象的属性,此时涉及vue中的变异检测机制。

vue官网如此介绍:

也就是是说上面这种操作虽然改变了数据,但是vue检测不到,所以没有更新页面。

那么问题来了,怎么能实现更新呢?有以下两种方式:

1.this.$set(list[0],'a',value)

2.list.splice(0,1,{a:value})

个人比较喜欢第二种方式,虽然是删除了数组元素又添加了数组元素,但是vue会最大程度利用dom,不会先移除dom再添加一个新的dom。

相关文章

网友评论

      本文标题:列表渲染中的更新

      本文链接:https://www.haomeiwen.com/subject/ajrnmqtx.html