博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Vue数组的动态响应
阅读量:6833 次
发布时间:2019-06-26

本文共 1097 字,大约阅读时间需要 3 分钟。

1.Vue动态响应

  • ①数据动态响应式是Vue的核心思想之一,动态响应可以简单理解为:数据更新→视图更新;视图更新→数据更新,这里的数据分为对象数组
  • ②对象:Vue处理对象的方式是通过Object.defineProperty劫持数据,通过gettersetter来处理;
  • ③数组:通过劫持数组的原型方法;将所有可能使得数组产生变化的方法劫持,当数据调用这些方法的时候,dep.notify(),会通知依赖于此数据的视图update();但是这样做会产生2个问题,如下:

    ['push','pop','shift','unshift','splice','sort', 'reverse'] .forEach(function (method) {const original = arrayProto[method]def(arrayMethods, method, function mutator (...args) {const result = original.apply(this, args)     ……//通知变化ob.dep.notify()return result})})

2.看看几个案例

  • ①通过this.arr[index] = newValue赋值的方式不能更新视图;
  • ②通过this.arr.length = 0,通过改变数组长度去改变数组,视图也不能更新;

    ①②虽然没有更新视图但是需要明白的是this.arr的数据是改变了的,只是没有通知依赖的数据更新;这是由于Vue没有做相应的处理。

    {

    {item}}

    data: {arr: [1, 3, 4, 5, 6],}, methods: { change: function () { this.arr[1] = 0; this.arr.length = 0;}}
  • ③混合方式

    若是①②和数组劫持了的方法一起使用,前面两种方法是起作用的;下图方法一方法二的结果是不一样的,如下图所示,这也说明了在①和②中,数据是改变了的,只是视图没有更新。

    //方式一change: function () {             this.arr[1] =0;             this.arr.reverse()}//方式二change: function () {             this.arr.reverse()             this.arr[1] =0;}

    clipboard.png

    clipboard.png

转载地址:http://gjxkl.baihongyu.com/

你可能感兴趣的文章
IPFS基本使用
查看>>
玩转Go语言之闭包
查看>>
iOS 控制器的实例 的block循环引用
查看>>
用委托者模式实现的多类型Adapter
查看>>
大数据技术于应用 可视化图表的开发应用
查看>>
说说MySQL索引相关
查看>>
小猿圈Java学习之程序员需要注意的5项守则
查看>>
CentOS 6.5安装Redis-2.8.23
查看>>
Django模板和变量的使用
查看>>
eyoucms上传不了logo,重试总是失败
查看>>
确认下眼神,这是你需要的MES软件吗?
查看>>
PTGUI全景合成软件使用教程之蒙版的使用
查看>>
虚拟机windows7及安装系统
查看>>
Altas 2.2.1 在 Ubuntu 14.04 LTS 下编译安装
查看>>
电影下载网站收集
查看>>
linux用户管理
查看>>
安装CentOS6网络配置问题
查看>>
JDK中的设计模式应用实例
查看>>
刘知远:让计算机听懂人话
查看>>
什么是DevOps?
查看>>