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

vue中实现监听数组内部元素

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

北京

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

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

看不清楚,换张图片

免费获取短信验证码

vue中实现监听数组内部元素

vue监听数组内部元素

在VUE中,对数组的监听是浅监听,也就是它只能监听到数组的长度或者有无的变化,当我们修改数组中的某一个值时,也就是数组的长度状态并没有改变时,在正常情况下它是无法监听到的,在watch中我们知道可以使用deep属性进行深监听,那么在其他情况下呢?

我们有两种办法解决此问题

1.通过原生的js对数组先进行切割,然后在添加新的内容(也就是我们要修改的内容)

array.splice(i, 1, newdata);    //从i位置开始  删除1个元素并用newdata来替代它

2.使用vue提供的函数$set

$set(array,i,newdata);   //把array数组的第i的值替换为newdata

vue如何监听数组的变化

修改了数组对象的原型,在原本的原型链上插入了一个新的原型对象,在新的原型对象上重写了7个变异方法(push/pop/unshift/shift/splice/sort/reverse)

var arrayProto = Array.prototype
var newArrayProto = Object.create(arrayProto)
newArrayProto.push = function (...rest) {
    // 监听到调用了数组的push方法,执行视图渲染的代码
    console.log('监听到调用了数组的push方法,执行视图渲染的代码,添加之前的逻辑。。。。')

    // 为了保留原来的数组push方法的逻辑
    arrayProto.push.call(this, ...rest)

    console.log('数组push方法添加之后的逻辑,。。。。。')
}
// 在递归遍历数据的时候,只要找到数组数据,就将其原型指向为newArrayProto
// arr.__proto__ = newArrayProto
var arr = [1,2,3]
arr.__proto__ = newArrayProto

在这里插入图片描述

为什么没有像对象一样用Object.defineProperty监听数组中所有的元素变化呢?

因为数组中的元素有可能有很多个,如果循环遍历,开销太大!不能这样。。。Vue给我们提供了支持驱动视图的API(this.$set,Vue.set),还有重写了7个变异方法

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

免责声明:

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

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

vue中实现监听数组内部元素

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

下载Word文档

猜你喜欢

如何在html5中监听canvas内部元素点击事件

如何在html5中监听canvas内部元素点击事件?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。像素法 像素检测法的思路是,将canvas中的多个图形(如果有多个的话)分别离屏
2023-06-09

PHP如何实现一个数组中元素全部加一

这篇文章主要介绍了PHP如何实现一个数组中元素全部加一,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。实现方法:1、自定义一个给参数加一的函数“myf($num)”;2、使用a
2023-06-25

PHP怎么实现一个数组中元素全部加一

实现方法:1、自定义一个给参数加一的函数“myf($num)”;2、使用array_map()函数为数组的每个元素应用一次自定义函数“myf()”,将数组元素传给该函数进行加一处理,语法“array_map("myf",$arr)”。
2017-05-30

Flex布局怎样实现div内部子元素垂直居中

这篇文章将为大家详细讲解有关Flex布局怎样实现div内部子元素垂直居中,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、Flex是Flexible Box的缩写,意为”弹性布局”,用来为盒状模型提供最大
2023-06-08

C++怎么实现数组中元素组合出最大值

本篇内容介绍了“C++怎么实现数组中元素组合出最大值”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!数组中元素组合出最大值如题:这可以算是一个
2023-06-30

PHP中实现数组元素个数求和的方法

标题:PHP中实现数组元素个数求和的方法在PHP开发中,经常会遇到需要对数组中的元素个数进行求和的需求。本文将介绍如何通过PHP代码实现对数组元素个数的求和操作。在PHP中,可以利用内置函数count()来获取数组中元素的个数。通过遍历
PHP中实现数组元素个数求和的方法
2024-03-13

java中如何实现向一维数组中追加元素

实现思路:首先创建一个比原来数组长度大的临时数组,然后将原来数组中的元素一一复制到临时数组,接着将需要添加的新元素添加到最后的索引位置,最后将临时数组地址指针引用赋值给原数组即可。推荐学习视频:java在线学习示例如下: public class ArrayA
java中如何实现向一维数组中追加元素
2019-01-24

解析Golang中实现数组元素删除的方法

Golang删除数组中的元素的方法详解,需要具体代码示例引言:Golang是一种静态类型、编译型的编程语言,以其强大的并发特性和简洁的语法受到了众多开发者的喜爱。在Golang中,数组是一种基本的数据结构,非常常用。有时候,我们需要从数组
解析Golang中实现数组元素删除的方法
2024-01-24

vue实现公共组件传值并及时监听到数据更新视图

这篇文章主要介绍了vue实现公共组件传值并及时监听到数据更新视图方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-01-13

java实现向有序数组中插入一个元素实例

整理文档,搜刮出一个java实现向有序数组中插入一个元素,稍微整理精简一下做下分享package cn.jbit.array; import java.util.*; public class Insert { public sta
2023-05-31

编程热搜

目录