Vue中使用set方法过程的一个小发现

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

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

第一种情况:

<div id="app">
   <ul>
     <li v-for="item in arr">{{ item }}</li>
   </ul>
</div>

var vm = new Vue({
    el: '#app',
    data: {
        arr: ['aaa','bbb','ccc']
    }
})
vm.arr[1] = 'ddd'

结果:aaa,bbb,ccc
可以使用如下方法使原数据改变

1.Vue.set(vm.arr,1,'ddd')
2. vm.$set(vm.arr,1,'ddd')

然而,在做项目时候,有一个发现:

<div id="app">
   <ul>
     <li v-for="item in arr">{{ item }}</li>
   </ul>
   <ul>
     <li v-for="item in arr2">{{ item }}</li>
   </ul>
</div>

var vm = new Vue({
    el: '#app',
    data: {
        arr: ['aaa','bbb','ccc']
        arr2: ['111','222','333']
    }
})

vm.arr[1] = 666;
vm.$set(vm.arr2,1,666)

运行结果是:

aaa,666,ccc
111,666,333

也就是说,$set()方法调用时,页面会全部更新一遍。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文包括:JDK5之前集合对象使用问题泛型的出现泛型应用泛型典型应用自定义泛型——泛型方法自定义泛型——泛型类泛型...
    廖少少阅读 1,932评论 5 16
  • Redis 数据结构简介 Redis 可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为Stri...
    DreamerRzc阅读 237,153评论 26 273
  • SwiftDay011.MySwiftimport UIKitprintln("Hello Swift!")var...
    smile丽语阅读 3,864评论 0 6
  • 基本格式 以json的形式、将数据(支持所有格式)挂载在vue的data上、方法挂载在vue的methods上。 ...
    kirito_song阅读 791评论 0 21
  • each()方法能使DOM循环结构简洁,不容易出错。each()函数封装了十分强大的遍历功能,使用也很方便,它可以...
    Bruce_zhuan阅读 1,110评论 0 7