广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Vue如何进行数据代理
  • 914
分享到

Vue如何进行数据代理

vue数据代理 2022-11-13 18:11:53 914人浏览 薄情痞子
摘要

目录了解如何代理准备工作查看VM和谁做了数据代理?get和set验证两条线get问题引出1set解决方式1问题衍生2验证set的过程分析过程图文解析第一部分第二部分第三部分总结展开_

在了解了关于js当中的Object.defineProperty()这个方法后,我们继续对vue当中的数据代理做一个基于现在的解析

建议观看之前先了解下js当中的Obejct.defineProperty()

链接地址

了解如何代理

准备工作

  • 准备一个容器,供vue实例对象指定
  • 在实例对象当中配置供页面调用的数据(data)
  • 测试页面
<body>
    <!-- 准备一个容器 -->
    <div class="subject">
        <div>昵称:{{name}}</div>
        <div>电话:{{phone}}</div>
    </div>
</body>
<script>
    new Vue({
        el: '.subject',
        data: {
            name: 'wavesbright',
            phone:"134****2557"
        }
    });
</script>

查看VM

通过之前的复习,我们知道,在vm这个实例对象当中配置项data当中的属性,会挂载到vm上,供页面调用而鼠标悬停在二者身上,出现了 invoke property getter,说明什么?说明,vm上的name和phone,是通过defineProperty 添加上去的 === 做了数据代理

和谁做了数据代理?

当你访问 name 或者 phone的时候一定会调用get(getter),这个get 一定会从某个地方,将所需要的值进行 返回什么地方? data嘛

var vm =  new Vue({
  el: '.subject',
  data: {
     name:'wavesbright'
     phone:"134****2557"
}
});

那你要对 name 和 phone 进行修改的时候,那肯定要 调用set嘛如何确定呢?

get和set

确实有,在哪里呢,往下翻就可以看到

这不就是代理么

验证两条线

vm当中的name 与 phone 是 与data进行数据绑定的

get

既然绑定了,那当我访问name变量的时候先调用getget 返回 data.name当中配置的value值

验证过程

很简单,直接修改data.name的值不就知道了

原图

修改后

说明是绑定到一起的嘛,但我为什么不修改 vm.name的值去查看data是否发生改变了呢?

问题引出1

我们设计的data当中的属性,经过vue的一系列操作最终挂载到了vue实例上,实现了数据绑定数据绑定是一个事实,我们现在所做的是验证这个过程通过修改配置项 data当中的name属性,页面当中确实发生了变化但是我现在想验证的是,我修改 vm.name的值的时候,data如何确定变化

用vm.data查看就能完成了,这不很简单嘛?是吗?

开国际玩笑哦,你data在全局定义了吗?没有吧?vm当中为什么也没有data呢?

set

解决方式1

定义一个全局的data不就行了

验证一下嘛,修改vue当中的name属性,data是否会发生变化

确实可以

问题衍生2

那么又有一个问题,我这个全局data是自己定义的,而正常构建的vue实例对象可不会这么写

但事实情况就是,我修改配置项data当中的数据,可以影响页面,而修改页面也可以影响data

我辛辛苦苦配置了一个data对象,交给了vm,vm如果不把我这个data存下来,那人家以后要用属性去那里取?vm一定会把这个data留下来。

这就说明一个问题,配置项data,一定在 构建完成的这个实例对象vm身上,但是为什么找不到呢?

因为人家叫 vm._data

这个就不展开了,因为 vm当中的data除了做数据代理,还有数据劫持

我们当下只需要记住一点,vm._data === data

验证set的过程

这是当前页面,现在我们要修改name属性

修改成全大写

分析过程

我们修改了vm.name的值一定调用了 set函数,拿到这个value值并且将这个 value值赋给了vm._data(data)

图文解析

第一部分

一切的一切都是因为开头写了这段代码

var vm =  new Vue({
  el: '.subject',
  data: {
     name:'wavesbright'
     phone:"134****2557"
}
});

紧随其后,马上就给我们创建了一个vue的实例对象

然后,vue开始为vm这个实例对象准备一些东西(属性)

重点,data来了,完全来自于上方的配置项data

截止到目前来说,没有数据代理的存在。我们所写的data,就是单纯的进行了一次赋值,然后给了下划线data(_data)

第二部分

实际上,vue做到这一步已经差不多了,代码也是可以写下去的

但是,请问,目前vm身上,有name吗,没有

但是我能拿到name的值吗?可以的,因为我有 _data

<body>
      <!--准备一个容器-->
      <div class="subject">
         <div>昵称:{{_data.name}}</div>
	 <div>电话:{{_data.phone}}</div>
      </div>
</body>
<script>
    /* var data = {...
    var vm = new Vue({
       el:'.subject',
       data:{
         name:'wavesbright'
	 phone:"134****2557"
	 }
});
</script>

一样可以拿到name和phone的值

因为,vm这个对象身上的所有属性,在模板上面都能够直接使用

但是这样写,那不是直接崩溃,创建一个变量就需要 _data一次,vue在这里做了一个很棒的操作

也就是数据代理

第三部分

vm在自己身上创建了一个变量name什么方式创建的?defineProperty通过get拿到vm自身上的_data.name的值修改数据的时候通过set,获取value,然后再将_data当中的属性进行修改完成了数据代理,双向绑定

为什么要将data当中的数据放在vm身上一份呢(_data)

就是为了让你编码的时候更方便(不至于每次都是 _data.xxx)

总结

  • vue中的数据代理
    • 通过vm对象 来 代理 data对象(配置项)中的属性操作(get/set
  • Vue中数据代理的好处
    • 更加方便操作data中的数据(_data.xxx)
  • 基本原理

    通过Object.defineProperty()将data配置项当中的所有属性配置到vm对象上

    为每一个添加到vm上的属性,指定一个get和set函数(getter/setter)

    在getter/setter内部去操作(读/写),data中对应的属性

展开_data

思考

老师不让展开是对的

因为如果按照之前的理解,这个符号代表什么 (...) 代表数据代理

这样容易引起理解误区,,这里实际上并不是数据代理,而是做了一个数据劫持

我希望看到的 _data的展开内容是什么?是这样的

data:{
   name:'wavesbright'
   phone:"134****2557"
}

实际上并不是

vue的承诺

只要你敢修改data当中的属性值,我就敢在页面当中 {{property}}一起发生变化

  • name的值发生了改变,最终影响到的是谁 === _data.name
  • 那么页面元素是怎么同步进行修改的?
  • vue是不是必须要知道,name这里发生了改变,他需要做什么 === 监听
  • 经历了一系列变动后,完成了小小的升级,最终达成响应式操作

到此这篇关于vue如何进行数据代理的文章就介绍到这了,更多相关vue数据代理内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Vue如何进行数据代理

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

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

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • Vue如何进行数据代理
    目录了解如何代理准备工作查看VM和谁做了数据代理?get和set验证两条线get问题引出1set解决方式1问题衍生2验证set的过程分析过程图文解析第一部分第二部分第三部分总结展开_...
    99+
    2022-11-13
    vue数据代理
  • Vue数据代理如何实现
    这篇文章主要介绍“Vue数据代理如何实现”,在日常操作中,相信很多人在Vue数据代理如何实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue数据代理如何实现”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
    99+
    2023-07-04
  • 如何在大数据时代应用Java函数进行数据处理?
    在当今的大数据时代,数据处理成为了一项非常重要的工作,而Java作为一门具有广泛应用的编程语言,其函数库也提供了大量用于数据处理的函数,可以帮助我们更高效地进行数据处理。本文将介绍如何在大数据时代应用Java函数进行数据处理,并提供相关演示...
    99+
    2023-09-15
    函数 教程 大数据
  • vue Proxy数据代理进行校验部分源码实例解析
    目录initProxy触发代理数据过滤总结 initProxy 数据拦截的思想除了为构建响应式系统准备,它也可以为数据进行筛选过滤,我们接着往下看初始化的代码,在合并选项后...
    99+
    2022-11-12
  • 如何进行C++代码的数据校验?
    如何进行C++代码的数据校验在编写C++代码时,数据校验是非常重要的一环。通过对用户输入的数据进行校验,可以增强程序的健壮性和安全性。本文将介绍一些常见的数据校验方法和技巧,帮助读者有效地进行C++代码的数据校验。输入数据类型检查在对用户输...
    99+
    2023-11-04
    跨平台 数据校验 C++代码
  • 如何进行C++代码的数据加密?
    如何进行C++代码的数据加密随着互联网的高速发展和信息技术的日趋成熟,数据的安全性变得越来越重要。在编程中,保护数据的安全性和防止数据被非法访问或篡改是非常重要的。本文将介绍如何使用C++代码对数据进行加密和解密,以确保数据的安全性。使用密...
    99+
    2023-11-02
    数据加密 C++代码
  • vue之数据代理详解
    目录一、下面我讲的是前端人员在vue-cli中就可以完成的一种解决方式——数据代理 二、上面的数据代理还是有以下缺陷的 总结 解决跨域的方式有多种,例如jsonp、cors但这两种都...
    99+
    2022-11-12
  • Python3如何进行表格数据处理
    这篇文章主要介绍“Python3如何进行表格数据处理”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python3如何进行表格数据处理”文章能帮助大家解决问题。技术背景数据处理是一个当下非常热门的研究...
    99+
    2023-07-05
  • Python中如何进行数据预处理?
    Python是一种广泛使用的编程语言,它在数据科学和机器学习领域中也非常受欢迎。在这些领域中,数据预处理是一个至关重要的步骤,因为原始数据通常是不完整、不一致和不可靠的。在本文中,我们将讨论Python中如何进行数据预处理。 1.导入数据 ...
    99+
    2023-08-11
    日志 numy load
  • Vue数据代理的原理和实现
    目录Object.defineProperty那么在Vue中如何应用数据代理呢总结Object.defineProperty defineProperty方法会直接在一个对象上定义一...
    99+
    2022-11-13
    Vue数据代理 Vue数据代理原理 vue数据代理怎么实现的
  • 代理ip如何进行分类
    这篇文章主要介绍了代理ip如何进行分类,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1、可以根据代理的匿名度将代理分为以下类别普通匿名代理:更改数据包,服务器可能发现是代理服...
    99+
    2023-06-20
  • vue如何使用cookie、localStorage和sessionStorage进行储存数据
    目录一、cookie的使用 1. 首先加载模块2. 在使用cookie的页面上进行引入3. 使用方法二、localStorage的使用1. 储存2. 获取3. 删除4. l...
    99+
    2022-11-13
    vue使用cookie vue使用localStorage vue使用sessionStorage vue储存数据
  • 如何使用Vue进行数据传递(方法浅析)
    Vue是一个流行的JavaScript框架,它可以帮助我们构建高效的用户界面。在Vue中,有多种方法可以进行数据传递,这些方法可以应用于单个组件或整个Vue实例。本文将介绍如何使用Vue进行数据传递。PropsProps是Vue提供的一种属...
    99+
    2023-05-14
  • MySQL5.7中如何进行数据碎片整理
    本篇文章给大家分享的是有关MySQL5.7中如何进行数据碎片整理,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 &...
    99+
    2022-10-19
  • PHP中如何进行数据分析处理?
    PHP是一门广泛应用于Web开发的语言,通常被用来构建动态的Web应用程序。随着数据驱动型应用程序的兴起,PHP在数据分析和处理方面也变得越来越重要。本文将介绍如何使用PHP进行数据分析处理,从数据的获取、存储、分析和可视化展示等方面进行讲...
    99+
    2023-05-14
    数据处理 数据统计 PHP数据分析
  • vue中的代码如何进行断点调试
    目录vue代码进行断点调试下面开始调试总结vue代码进行断点调试 对于这样的代码,我们打两个断点,想要调试的话,需要在项目根目录,新建一个文件:vue.config.js,然后根据...
    99+
    2023-05-17
    vue代码 vue代码断点调试 vue断点调试
  • PHP 中如何使用数组进行数据处理?
    PHP是一种广泛应用于Web开发的脚本语言。在PHP中,数组是一种非常重要的数据结构,用于存储和处理大量数据。数组提供了一种方便的方式来组织和访问数据,使得数据处理变得更加容易和高效。在本文中,我们将介绍PHP中如何使用数组进行数据处理,希...
    99+
    2023-10-24
    数组 unix numpy
  • 如何在Android进行代理设置
    这篇文章给大家介绍如何在Android进行代理设置,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Android代理设置步骤:打开你的Android设置。点击无线。按住Wi-Fi网络名称。选择“修改网络”。单击高级选项。...
    99+
    2023-06-25
  • 进行数据处理的6个 Python 代码块分享
    目录1、选取有空值的行2、快速替换列值3、对列进行分区4、将一列分为多列5、中文筛选6、更改列的位置前言: 大家好,今天和大家分享自己总结的6个常用的 Python 数据处理代码,对...
    99+
    2022-11-10
  • PHP中如何进行数据治理和数据质量控制?
    随着互联网的不断发展,数据已经成为了企业和机构的重要资源和资产。而对于PHP程序员来说,如何进行数据治理和数据质量控制也变得越来越重要。数据治理是指对数据进行管理、规范和控制,以保证数据的准确性、完整性、一致性、安全性和可靠性。数据质量控制...
    99+
    2023-05-21
    PHP 数据治理 数据质量控制
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作