我的编程空间,编程开发者的网络收藏夹
学习永远不晚

vue中怎么监听数组变化

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

vue中怎么监听数组变化

这篇文章主要介绍了vue中怎么监听数组变化,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

vue是什么

Vue是一套用于构建用户界面的渐进式JavaScript框架,Vue与其它大型框架的区别是,使用Vue可以自底向上逐层应用,其核心库只关注视图层,方便与第三方库和项目整合,且使用Vue可以采用单文件组件和Vue生态系统支持的库开发复杂的单页应用。

从图开始

咱们先看下下面的图,先了解下vue中实现的思路,这样接下来再看源码的实现,会一清二楚,明明白白。

vue中怎么监听数组变化

看到这个图然后思考一下,是不是大致了解了~

首先判断浏览器是否支持__proto__指针

重写数组的这7个方法,然后根据是否支持__proto__,将改写后的数组指向数组的prototype。

是不是很简单!!!

看看源码吧

了解了实现原理,那么我们再看看源码吧,看下源码主要是更深入的了解作者是如何实现的,也可以看下优秀的代码编码方式,加以学习。

关于一些解释我就写在下面的代码块中了哈!

//https://github.com/vuejs/vue/blob/dev/class="lazy" data-src/core/observer/array.js//def方法是基于Object.defineProperty封装的一层方法,很简单,我会在下面把代码贴出来,免得大家去找了。import { def } from '../util/index' //保存下原生的数组原型对象const arrayProto = Array.prototype//进行原型连接,将arrayMethods的原型指向Array.prototypeexport const arrayMethods = Object.create(arrayProto)const methodsToPatch = [  'push',  'pop',  'shift',  'unshift',  'splice',  'sort',  'reverse']methodsToPatch.forEach(function (method) {  // 缓存原生的方法  const original = arrayProto[method]  def(arrayMethods, method, function mutator (...args) {    var args = [],     len = arguments.length;    while (len--) args[len] = arguments[len];    const result = original.apply(this, args) // 原来的数组方法执行结果    const ob = this.__ob__ // 这个__ob__就是Observe的实例~~~~    let inserted    switch (method) {      case 'push':      case 'unshift':        inserted = args        break      case 'splice':        inserted = args.slice(2)        break    }    if (inserted) ob.observeArray(inserted) // 如果数组有变化,则重新调用observeArray    // notify change    ob.dep.notify()  //    return result  })})

这个是关于Observe的代码:

var Observer = function Observer(value) {    this.value = value;    this.dep = new Dep();    this.vmCount = 0;    def(value, '__ob__', this);  //这里会看到在每个对象数据上都会绑定一个Observe的实例,所以上面代码中的this.__ob__就是这个    if (Array.isArray(value)) { // 这里判断是否是数组类型的数据,如果是的话就走observeArray      if (hasProto) {        protoAugment(value, arrayMethods);      } else {        copyAugment(value, arrayMethods, arrayKeys);      }      this.observeArray(value); //这里就是处理数组类型的数据,如下    } else {      this.walk(value);    }  };

如下是observeArray的实现:

Observer.prototype.observeArray = function observeArray(items) {    for (var i = 0, l = items.length; i < l; i++) {      observe(items[i]); // 这个observe方法如下    }  };

在这里我们看下observe这个方法:

function observe(value, asRootData) {    if (!isObject(value) || value instanceof VNode) {      return    }    var ob;    if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {      ob = value.__ob__;    } else if (      shouldObserve &&      !isServerRendering() &&      (Array.isArray(value) || isPlainObject(value)) &&      Object.isExtensible(value) &&      !value._isVue    ) {      ob = new Observer(value);    }    if (asRootData && ob) {      ob.vmCount++;    }    return ob  }

这个是关于def方法的实现,很简单我就不说了哈:

function def (obj, key, val, enumerable) {    Object.defineProperty(obj, key, {      value: val,      enumerable: !!enumerable,      writable: true,      configurable: true    });}

感谢你能够认真阅读完这篇文章,希望小编分享的“vue中怎么监听数组变化”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网行业资讯频道,更多相关知识等着你来学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

vue中怎么监听数组变化

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

vue中怎么监听数组变化

这篇文章主要介绍了vue中怎么监听数组变化,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。vue是什么Vue是一套用于构建用户界面的渐进式JavaScript框架,Vue与其它
2023-06-14

vue中怎么监听url地址栏参数变化

这篇“vue中怎么监听url地址栏参数变化”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue中怎么监听url地址栏参数变化
2023-07-05

angular怎么监听数据变化

在Angular中,可以使用Angular的Change Detection机制来监听数据的变化。使用双向数据绑定:双向数据绑定是Angular中最常用的数据绑定方式。当数据发生变化时,Angular会自动更新视图。例如,在模板中使用ngM
2023-10-24

mysql怎么监听数据变化

MySQL本身并没有提供直接监听数据变化的功能。但是可以通过以下几种方式来实现数据变化的监听:使用触发器(Trigger):可以在表上创建触发器,当插入、更新或删除数据时触发相应的操作。触发器可以在数据变化前或变化后执行,可以使用触发器来记
mysql怎么监听数据变化
2024-04-09

vue如何用watch监听数据变化

这篇文章主要介绍“vue如何用watch监听数据变化”,在日常操作中,相信很多人在vue如何用watch监听数据变化问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue如何用watch监听数据变化”的疑惑有所
2023-07-04

java怎么监听oracle数据变化

要监听Oracle数据库中的数据变化,可以使用Oracle的触发器(Trigger)或者Oracle的Java消息服务(Oracle Advanced Queuing)。1. 使用Oracle的触发器: - 在数据库中创建一个触发器,可
2023-10-27

java怎么监听oracle数据变化

使用JDBC监听Oracle数据更改本指南介绍如何使用JDBC接口在Java应用程序中监听Oracle数据库中的数据更改,包括:配置Oracle数据库创建Java监听类建立JDBC连接创建和添加RowSet监听器执行监听并处理数据更改示例代码提供了详细的分步说明,展示了如何使用JDBC捕获和处理Oracle数据库中的数据更改,以实现数据同步、告警和审计功能。此外,本文还提供了其他监听方法,如DCN和触发器。
java怎么监听oracle数据变化
2024-04-12

vuex如何用state监听数组变化

这篇文章主要介绍了vuex如何用state监听数组变化的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vuex如何用state监听数组变化文章都会有所收获,下面我们一起来看看吧。代码如下:import Vue f
2023-07-04

web前端:vue中监听路由参数的变化

编程学习网:路由(routing)是指分组从源到目的地时,决定端到端路径的网络范围的进程。路由工作在OSI参考模型第三层--网络层的数据包转发设备。路由器通过转发数据包来实现网络互连。
web前端:vue中监听路由参数的变化
2024-04-23

vue中如何监听url地址栏参数变化

这篇文章主要介绍了vue中如何监听url地址栏参数变化问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-03-10

sqlserver怎么监听表变化

在SQL Server中,可以使用触发器(Trigger)来监听表的变化。触发器是一种特殊的存储过程,它会在表中的数据发生变化时自动执行。以下是创建触发器的一般步骤:创建一个新的触发器:CREATE TRIGGER [TriggerNa
sqlserver怎么监听表变化
2024-04-09

vue中watch监听不到变化的解决

本文主要介绍了vue中watch监听不到变化的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-01-05

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录