Vue 包含两种观察数组的方法分别如下

 1.变异方法

  顾名思义,变异方法会改变被这些方法调用的原始数组,它们也将会触发视图更新,这些方法如下

    push()

    pop()

    shift()

    unshift()

    splice()

    sort()

    reverse()

   使用举例:example1.items.push({ message: 'Baz' })

 2.非变异方法

  非变异方法与变异方法的区别就是,非变异方法不会改变原始数组,总是返回一个新数组,

  当使用非变异方法时,可以用新数组替换旧数组,非变异方法大致有:filter()concat() 和 slice()

  使用举例:

example1.items = example1.items.filter(function (item) {
return item.message.match(/Foo/)
})

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

 1.当你利用索引直接设置一个项时,例如:vm.items[indexOfItem] = newValue

 2.当你修改数组的长度时,例如:vm.items.length = newLength

vue针对这两个问题给出了相应的解决办法,使用这两种方法,也会触发状态更新

 1.使用vue全局方法Vue.set() 或者使用vm.$set() 实例方法

 2.使用 splice,caoncat等修改数组

Vue.set用法如下(vm.$set方法是Vue.set的别名,与其用法一致)

  

总的来说:vue能不能检测到数组的变化并更新,取决于原生js的数组方法,

     如果原生js方法(vue变异方法)能够修改原数组,那么vue就可以检测到变化并更新(例如push等方法)

     如果原生js方法(vue非变异方法)不能够修改原数组,而是返回一个新数组,那么vue也可以检测到变化并更新,

        前提是使用这些方法时要把新数组返回出来去替换掉旧数组

     至于原生js的数组的两个坑,我们一定到注意,直接利用vue提供的方法来解决

vue中数组变动更新检测的更多相关文章

  1. 去掉vue 中的代码规范检测(Eslint验证)

    去掉vue 中的代码规范检测(Eslint验证): 1.在搭建vue脚手架时提示是否启用eslint检测的. Use ESLint to lint your code? 写 no; 2.如果项目已经生 ...

  2. vue 组件中数组的更新

    今天写项目时遇到的问题,瞬间就卡在那了 来还原一下: parent.vue: <template> <div> <button @click="change&q ...

  3. vue中数组检测重复性的两个方法

    检查数组重复(一)let inputValue = this.positionGroupInput[groupId].inputValue; if (inputValue) { for (let po ...

  4. Vue中数组元素被替换,页面没有动态展示

    原始代码 页面没有相应goodsList替换,打印goodsList数据已经被替换: (借用https://www.cnblogs.com/belongs-to-qinghua/p/11112613. ...

  5. vue中数组删除,页面没重新渲染

    创建一个组件时,数据类型是数组,在删除这个数组中的数据时,数组中的数据是对的,但页面渲染的数据却不对. 举例:(不一定复现) <ul> <li v-for="(item, ...

  6. vue中getters不更新数据解决办法

    在 Vue.js devtools 中看到,我们明明更改了仓库 state 中的数据,但是我们的 getters 就是值渲染一次之后就不再重新渲染了 解决方法:使用 Vue.set() 方法,就是专门 ...

  7. 详解Vue中的nextTick

    Vue中的nextTick涉及到Vue中DOM的异步更新,感觉很有意思,特意了解了一下.其中关于nextTick的源码涉及到不少知识,很多不太理解,暂且根据自己的一些感悟介绍下nextTick. 一. ...

  8. Vue中comoputed中的数据绑定

    Vue中的数据实现响应式绑定是在初始化的时候利用definePrototype的定义set和get过滤器,在进行组件模板编译时实现water的监听搜集依赖项,当数据发生变化时在set中通过调用dep. ...

  9. 【转】简单理解Vue中的nextTick

    前言: Vue中的nextTick涉及到Vue中DOM的异步更新,感觉很有意思,特意了解了一下.其中关于nextTick的源码涉及到不少知识,很多不太理解,暂且根据自己的一些感悟介绍下nextTick ...

随机推荐

  1. 转载 - KMP算法祥解

    出处:http://www.cppblog.com/oosky/archive/2006/07/06/9486.html KMP字符串模式匹配详解 来自CSDN     A_B_C_ABC 网友 KM ...

  2. 【slighttpd】基于lighttpd架构的Server项目实战(6)—预备知识之Http

    接下来,我们開始http部分的开发. 在此之前.有必要先学习一下HTTP协议- http1.1 的rfc文档:http://www.ietf.org/rfc/rfc2616.txt 简单介绍 超文本传 ...

  3. Struts2 动态结果集

    1.index.jsp <body> 动态结果 一定不要忘了为动态结果的保存值设置set get方法 <ol> <li><a href="user/ ...

  4. 数据结构之---C语言实现共享栈

    所谓共享栈是两个栈在一个顺序的存储空间中.两个栈的栈底各自是存储空间的首尾地址. 如图我们能够将两个栈构造成一个: 如图: 从这里也就能够分析出来,栈1为空时,就是top1等于-1时.而当top2等于 ...

  5. 【入门篇】ANDROID开发之BUG专讲

    话说诸葛亮是一个优秀的程序员,每个锦囊都是应对不同的case而编写的.可是优秀的程序员也敌只是更优秀的bug.六出祈山.七进中原,鞠躬尽瘁,死而后已的诸葛亮仅仅由于有一个错误的case-马谡,整个结构 ...

  6. How to fix yum errors on CentOS, RHEL or Fedora

    Yum is a package management tool for installing, updating and removing rpm packages on RedHat-based ...

  7. 基础树形DP小结

    HDU 4044 Geodefense http://blog.csdn.net/zmx354/article/details/25109897 树形DP暂且先告一段落了. HDU 3586 Info ...

  8. Jquery-Uncaught ReferenceError: $ is not defined报错

    在我的jsp页面上有这些js代码: //载入数据 $(document).ready(function() { var param={}; param.page=3; param.size=10; $ ...

  9. 有什么springMVC+myBatis的书?

    最近在看MyBatis,把我最近看的东西给你整理一下吧. 书籍:深入浅出MyBatis技术原理与实战 下载地址:[免费]深入浅出MyBatis技术原理与实战.pdf-CSDN下载 MyBatis 相关 ...

  10. android 更新ui

    https://www.cnblogs.com/rayray/p/3437048.html https://www.cnblogs.com/zhaoyanjun/p/5546683.html