返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Vue如何监测数组类型数据发生改变的(推荐)
  • 894
分享到

Vue如何监测数组类型数据发生改变的(推荐)

Vue监测数组类型数据Vue监测数组 2022-11-13 19:11:53 894人浏览 八月长安
摘要

目录案例准备需求set的局限性监测数组准备工作数组和对象的不同直接修改numbers之前的错误解释Vue如何监测?包装技术原形vue流程官网寻找答案通过上一节,我们知道了vue检测对

通过上一节,我们知道了vue检测对象数据发生改变的原理

但是还有个api我们没有讲解,Vue.set();

这个API比较适合在理解了对象检测的原理后进行讲解

案例准备

html

<!-- 创建一个容器 -->
    <div class="app">
        <h1>姓名:{{student.name}}</h1>
        <h1>年龄:{{student.age}}</h1><br>
        <h2>朋友们</h2>
        <ul>
            <!-- 列表渲染 == friends -->
            <li v-for="(item,index) in friends">
                {{item.name}}-{{item.rage}}-{{item.mage}}
            </li>
        </ul>
    </div>

data配置项

<script>
    const vm = new Vue({
        el: '.app',
        data: {
            student: {
                name: 'wavesbright',
                age: 21,
            },
            friends: [ // 真实年龄,内心年龄
                {name: "Jack",rage: 32,mage: 40},
                {name: "Jony",rage: 24,mage: 45},
                {name: "Jone",rage: 28,mage: 50},
            ]
        },
        methods: {

        },
    });
</script>

页面效果

需求

  • 我的数据都是写在data当中的,通过vue的数据代理
  • 在页面当中实现了响应式开发
  • 那么现在有一个问题
  • 我想给,student 添加一个属性,这个属性是后来添加的,不是之前就添加的
  • 想让 这个属性能够实现响应式,应该如何实现?

错误示范

1.直接在vm后面加个属性不就完了?

2.修改 _data,然后给它添加一个属性?

  • 上述两个操作的问题,添加的属性没有进行数据代理
  • 无法完成响应式
  • 仔细看的话,在student这个对象当中,sex这个属性是没有get和set函数的

添加测试

我们在这里添加一个渲染项,然后我们添加属性试试,现在我data当中是没有这个属性的

并不能被vue所识别到

那么我们后面想要自己添加属性就没有办法完成响应式了吗,诶,这就是我们接下来要引入的API

Vue.set()

  • 该API需要三个参数

  • target: 目标
  • key: 添加的属性名
  • val: 添加的属性值

我现在算是明白了,小程序的 this.setData() 就是从这里变来的

这里其实应该是 .student的;因为操作的都是同一个对象的地址

set的局限性

我现在要在data当中,添加一个属性,这个属性是leader == 校长

我们使用.set添加试试

  • 这里报错的意思就是,不允许直接在vue实例身上添加一个属性
  • 解读一下这段话哈
    • 我现在是在_data当中添加属性
    • 但是这个添加的属性,最后会挂载在vue实例身上
    • 所以,这里使用.set是不允许的,不能直接添加
  • .set()不能在data当中直接添加属性
  • 只能给data当中的某个对象(student)添加属性

vm是不能作为target的,vm当中的data,也不能作为target

监测数组

准备工作

  • 新建一个demo,重新配置了数据项data
  • 在data当中有两个属性,一个numbers的数组,一个student的对象
  • 我们查看vue实例对象,在查看之前可以很明确的说,numbers 和 student 都挂载在了vue实例身上,并且,有专门为他俩服务的get和set

数据代理

现在我们点击去看看二者有什么不同,或者说,vue当中对数组和对象类型的数据是如何代理的

数组和对象的不同

数组

对象

区别,目前而言

  • 数组当中的数据,是没有进行数据代理的,没有专门为 元素 服务 的 get和set
  • 而对象当中,每个属性都是有get和set的,哪怕这个属性是对象也有
  • 也就是说,如果我们直接在vue当中直接修改numbers对应索引的值,vue是观测不到的

直接修改numbers

我们写一串DOM元素进行测试

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

现在,我直接在控制台中对数组当中的元素进行修改

我们将最后一项 从5改为6

数据的确修改成功了,但是vue检测不到,页面无法响应

之前的错误解释

现在,我们来回顾一下之前遇到的bug,我们添加一个persons对象数组

从控制台我们来观察一下这个persons

  • 这是一个对象数组,这个数组当中的每一项数据,都没有被进行数据代理
  • 但是因为每一项 数据 都是对象类型,所以 在对象类型当中 数据是进行了代理(get和set)的

3.这里很重要,请仔细看

所以为什么下面的修改不起作用,因为根本没代理,没有代理无法完成响应式数据

这个问题解决了顺势抛出下一个问题,vue怎么就知道数组内部的属性发生改变了呢,它是如何监测到的?

vue如何监测?

  • 蓝色框当中的都是可以对数组进行修改的,会改变原有数组结构
  • 但是filter不会,他会返回一个新数组,不修改原数组
  • arr 调用了蓝色框框当中的数组API,自身才会发生改变
  • vue当中规定,你只有使用了上述的7个方法,我才承认你修改数组了

那它咋知道我调用了上面的7个API呢?

包装技术

原形

使用 Array这个原形对象身上的 push 举例子

这个push,是给数组调用的

我们在控制台上来个数组

这个push是哪里来的?==> 其实是一层一层嵌套的,从原形对象身上来的

二者身上的push是相等的

vue

vue身上的数组,使用的并不是 原形数组Array身上的 API函数

如何测试?

很简单,回到我们刚刚的案例

这下您能明白了吗

流程

当你对一个被vue所管理的数组进行了api的调用(push,shift,unshift.....)

你调用的这个API,就不是原型对象Array身上的API了;而是vue的api

在这个api当中,会做两个步骤

  • 调用原形身上的API(push.....)
  • 重新解析模板,生成虚拟dom.......那一套流程

是这么一回事吗,我们看下官网是如何解答的

官网寻找答案

点我跳转

  • 点击 列表渲染
  • 点击 数组更新检测

我们来看这句话

enmmmm,后面没讲了,基本其实到这里就差不多了,后面的都需要在实际开发当中去慢慢琢磨了。

到此这篇关于Vue如何监测数组类型数据发生改变的?的文章就介绍到这了,更多相关Vue监测数组类型数据内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Vue如何监测数组类型数据发生改变的(推荐)

本文链接: https://lsjlt.com/news/170637.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Vue如何监测数组类型数据发生改变的(推荐)
    目录案例准备需求set的局限性监测数组准备工作数组和对象的不同直接修改numbers之前的错误解释vue如何监测?包装技术原形vue流程官网寻找答案通过上一节,我们知道了vue检测对...
    99+
    2022-11-13
    Vue监测数组类型数据 Vue监测数组
  • 详解Vue如何监测数组的变化
    目录一、使用 Vue.js 提供的方法来更新数组二、使用专门用于监测数组变化的语法糖三、使用Vue.observable()函数四、使用 computed 属性和 watch 属性监...
    99+
    2023-01-28
    Vue监测数组变化 Vue 数组变化 Vue 数组
  • php如何改变数据类型
    这篇文章给大家分享的是有关php如何改变数据类型的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。php的框架有哪些php的框架:1、Laravel,Laravel是一款免费并且开源的PHP应用框架。2、Phalco...
    99+
    2023-06-15
  • JavaScript如何监测数组的变化
    前言 之前介绍defineProperty的时候说到,其只能监测对象的变化,并不能监测数组的变化。 本文致力于说清楚怎么实现监测数组的变化。 核心思路:找到改变原数组的方法,然后对这...
    99+
    2024-04-02
  • vue前端测试开发watch如何监听data的数据变化
    本篇内容主要讲解“vue前端测试开发watch如何监听data的数据变化”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue前端测试开发watch如何监听data的数据变化”吧!watch监听d...
    99+
    2023-06-30
  • 基于jquery的监控数据是否发生改变
    这样之前的功夫又白费了。解决这些问题的办法就是:监控页面数据是否发生变化。如果发生变化,提示用户保存。如果数据未发生变化。当我们点击保存时,也不需要提交到数据库。 接下来看看解决办法...
    99+
    2022-11-21
    监控数据
  • sqlserver如何改变字段数据类型
    要改变字段的数据类型,可以使用ALTER TABLE语句加上MODIFY COLUMN子句来实现。 例如,如果要将字段"a...
    99+
    2024-04-02
  • vue前端测试开发watch监听data的数据变化
    目录watch监听data的数据变化新问题解决1. 先把姓名的值,也加到options里2. 在监听里增加for循环和判断watch监听data的数据变化 上一篇里提到了用eleme...
    99+
    2024-04-02
  • vue中是如何检测数组变化的
    vue中检测数组变化的方法:vue使用函数劫持的方式,通过重写数组的某些方法来检测数组变化。在将数组处理成响应式数据后,如果使用数组原始方法改变数组时,数组值会发生变化,但是并不会触发数组的setter来通知所有依赖该数组的地方进行更新,若...
    99+
    2024-04-02
  • vue如何检测对象和数组的变化
    这篇文章主要介绍了vue如何检测对象和数组的变化的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue如何检测对象和数组的变化文章都会有所收获,下面我们一起来看看吧。检测对象变化1、不能检测到对象属性的添加或删除...
    99+
    2023-07-04
  • ASP 变量与数据类型:一个改变你编码人生的指南
    变量 用 Dim 关键字声明变量。 变量名称必须以字母开头,只能包含字母、数字和下划线。 变量没有默认值,必须在使用前分配值。 数据类型 ASP 支持多种数据类型,包括: String: 文本值 Integer: 整数 Double...
    99+
    2024-03-10
    ASP 变量是存储数据值的地方 而数据类型定义了变量中存储数据的类型。变量和数据类型的正确使用对于编写健壮且可维护的 ASP 代码至关重要。
  • 如何修改numpy array的数据类型
    目录修改numpy array数据类型1、numpy数据类型2、改变numpy array数据类型numpy数据类型说明及自动转换陷阱1、数据类型的表示2、构造ndarray时的dt...
    99+
    2024-04-02
  • oracle如何修改列的数据类型
    要修改Oracle表的列数据类型,需要使用ALTER TABLE语句。以下是一些示例: 修改列的数据类型: ALTER TABL...
    99+
    2024-04-15
    oracle
  • 响应式编程如何改变Java中的索引数据类型?
    响应式编程是一种编程范式,它可以帮助我们更加优雅地处理异步事件流。在Java中,响应式编程已经成为了一种趋势,并且在Java 9中也加入了响应式流API。但是,响应式编程在处理索引数据类型方面,需要我们有一些新的思考方式。 Java中的索引...
    99+
    2023-09-09
    响应 索引 数据类型
  • sql如何修改表列的数据类型
    要修改表列的数据类型,可以使用ALTER TABLE语句。例如,要将表中的某一列的数据类型从INT改为VARCHAR,可以使用以下语...
    99+
    2024-04-09
    sql
  • PHP中如何查询数组中的数据类型
    标题:PHP中查询数组中的数据类型及具体实现方法 在PHP中,数组是一种非常常用的数据结构,用于存储多个相关元素。有时候我们需要查询数组中元素的数据类型,以便进行进一步的处理或者验证。...
    99+
    2024-03-14
  • vue如何使用watch监听指定数据的变化
    目录使用watch监听指定数据的变化vue watch监听多个值使用watch监听指定数据的变化  在vue中,可以使用watch属性来监听data中某个属性值的变化。 &...
    99+
    2024-04-02
  • Vue如何用this.$set改变数组里的某个值
    Vue用this.$set改变数组里的某个值 <!DOCTYPE html> <html lang="en"> <head> <...
    99+
    2022-12-19
    Vue this.$set改变数组某个值 vue中this.$set()的用法 vue中this.$set()
  • php如何更改数据表的字段类型
    这篇文章主要介绍了php如何更改数据表的字段类型的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇php如何更改数据表的字段类型文章都会有所收获,下面我们一起来看看吧。连接数据库首先,我们需要使用PHP连接到数据库...
    99+
    2023-07-05
  • php如何修改数据表的字段类型
    这篇文章主要介绍“php如何修改数据表的字段类型”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“php如何修改数据表的字段类型”文章能帮助大家解决问题。在 PHP 中,修改数据表的字段类型是一项非常重...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作