返回顶部
首页 > 资讯 > 精选 >Vue数据代理如何实现
  • 125
分享到

Vue数据代理如何实现

2023-07-04 23:07:36 125人浏览 八月长安
摘要

这篇文章主要介绍“Vue数据代理如何实现”,在日常操作中,相信很多人在Vue数据代理如何实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue数据代理如何实现”的疑惑有所帮助!接下来,请跟着小编一起来学习吧

这篇文章主要介绍“Vue数据代理如何实现”,在日常操作中,相信很多人在Vue数据代理如何实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue数据代理如何实现”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

    一,前言

    Vue 数据初始化流程中,数组类型的数据劫持是如何实现的,核心思路如下:

    出于对性能的考虑,Vue 没有对数组采用 Object.defineProperty 进行递归劫持,而是对能够导致原数组变化的 7 个方法进行了拦截和重写,实现了对数组的数据劫持。

    二,数据代理的实现

    1,Vue 是如何操作数据的

    在 Vue 中,是可以在外部直接通过 vm 实例进行数据访问和操作:

    let vm = new Vue({  el: '#app',  data() {    return { message: 'Hello Vue', obj: { key: "val" }, arr:[1,2,3]}  }});console.log(vm.message)console.log(vm.arr.push(4))

    抛出问题:vm.message 等价于 $options.data.message,是如何实现的?

    2,当前是如何操作数据的

    当前代码,外部的 vm 实例只能拿到 vm. o p t i o n s ,拿到 d a t a 需要 v m . options,拿到 data 需要 vm. options,拿到data需要vm.options.data

    // src/state.js#initDatafunction initData(vm) {    let data = vm.$options.data;    data = isFunction(data) ? data.call(vm) : data;    observe(data);    data.message    data.arr.push(4); }

    要想实现 vm.message 和 $options.data.message 等效

    相当于将 vm 实例操作代理到 $options.data 上,即实现数据代理

    3,数据代理的思路

    为了让外部的 vm 实例能够拿到观测后的 data,将处理后的 data 直接挂载到 vm 上

    // src/state.js#initDatafunction initData(vm) {    let data = vm.$options.data;    data = vm._data = isFunction(data) ? data.call(vm) : data;    observe(data);}

    这样,vm 实例就能够在外部通过 vm._data.message 获取到 data.message

    接下来,再做一次代理,将 vm 实例操作(vm.message),代理到 vm._data 上即可

    4,数据代理的实现

    通过 Object.defineProperty 对 _data 中的数据操作进行劫持

    即:vm.message 在 vm 实例上取值时,将它代理到 vm._data 上取值

    // src/state.js#initDatafunction initData(vm) {    let data = vm.$options.data;    data = vm._data = isFunction(data) ? data.call(vm) : data;    observe(data);    // 当 vm.message 在 vm 实例上取值时,将它代理到vm._data上去取    for(let key in data){        Proxy(vm, key, '_data')    }}// src/state.js#Proxyfunction Proxy(vm, key, source) {    Object.defineProperty(vm, key, {        get(){            return vm[source][key]        },        set(newValue){            vm[source][key] = newValue;        }    })}

    5,数据代理的测试

    let vm = new Vue({  el: '#app',  data() {    return { message: 'Hello Vue', obj: { key: "val" }, arr:[1,2,3]}  }});console.log(vm)console.log(vm.message)

    Vue数据代理如何实现

    观察打印结果:

    获取 vm 实例时,会通过 get 方法将 _data 全部属性打印出来

    当前 vm 实例上,包含 data 全部属性及对应的 get、set 方法

    这样,就实现了数据代理:

    当从 vm 实例取值时,就会被代理到 vm._data 取值

    到此,关于“Vue数据代理如何实现”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

    --结束END--

    本文标题: Vue数据代理如何实现

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

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

    猜你喜欢
    • Vue数据代理如何实现
      这篇文章主要介绍“Vue数据代理如何实现”,在日常操作中,相信很多人在Vue数据代理如何实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue数据代理如何实现”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
      99+
      2023-07-04
    • Vue数据代理的原理和实现
      目录Object.defineProperty那么在Vue中如何应用数据代理呢总结Object.defineProperty defineProperty方法会直接在一个对象上定义一...
      99+
      2022-11-13
      Vue数据代理 Vue数据代理原理 vue数据代理怎么实现的
    • Vue如何进行数据代理
      目录了解如何代理准备工作查看VM和谁做了数据代理?get和set验证两条线get问题引出1set解决方式1问题衍生2验证set的过程分析过程图文解析第一部分第二部分第三部分总结展开_...
      99+
      2022-11-13
      vue数据代理
    • Vue如何实现数据驱动
      这篇文章主要介绍“Vue如何实现数据驱动”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue如何实现数据驱动”文章能帮助大家解决问题。一、前言之前实现了为每个对象扩展一个$set方法,用于新增属性使...
      99+
      2023-07-04
    • 如何使用vue代码实现数据双向绑定
      这篇文章主要介绍“如何使用vue代码实现数据双向绑定”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“如何使用vue代码实现数据双向绑定”文章能帮助大家解决问题。代码如下:* Object.d...
      99+
      2023-07-04
    • Vue数据代理的实现流程逐步讲解
      目录一,前言二,数据代理的实现1,Vue 是如何操作数据的2,当前是如何操作数据的3,数据代理的思路4,数据代理的实现5,数据代理的测试三,结尾一,前言 上篇,主要介绍了 Vue 数...
      99+
      2023-01-06
      Vue数据代理 Vue数据代理原理 vue数据代理怎么实现的
    • PHP 如何在大数据时代实现实时处理?
      随着互联网的快速发展,数据量呈现爆炸式增长。如何高效地处理海量数据成为了所有企业和机构面临的共同问题。PHP 作为一种流行的编程语言,如何在大数据时代实现实时处理成为了一个热门话题。本文将介绍 PHP 在大数据时代实现实时处理的方法和技巧...
      99+
      2023-09-15
      大数据 实时 spring
    • vue如何实现表单数据验证
      这篇文章主要讲解了“vue如何实现表单数据验证”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue如何实现表单数据验证”吧!为el-form表单添加:rul...
      99+
      2024-04-02
    • Vue如何实现分批加载数据
      目录分批加载数据滚动加载数据分批加载数据 最近在写vue的项目,因为后台返回的数据量太大,在调用了高德地图渲染"polygon"覆盖物的时候处理不过来,直接蹦掉了...
      99+
      2024-04-02
    • vue如何实现数据双向绑定
      Vue.js是一个流行的前端框架,它提供了多种方式来实现数据双向绑定。数据双向绑定是Vue.js最重要的特性之一,它使得开发者能够根据数据的变化自动更新视图,同时也能根据视图的变化自动更新数据。因此,Vue.js的数据双向绑定也成为前端面试...
      99+
      2023-05-14
    • vue之数据代理详解
      目录一、下面我讲的是前端人员在vue-cli中就可以完成的一种解决方式——数据代理 二、上面的数据代理还是有以下缺陷的 总结 解决跨域的方式有多种,例如jsonp、cors但这两种都...
      99+
      2024-04-02
    • vue如何实现Json格式数据展示
      目录Json格式数据展示vue解析json数据Json格式数据展示 vue的jsonViewer组件也很好用,在网上看到有大神自己写的组件(递归调用),觉得很好,稍作修改,记录一下 ...
      99+
      2024-04-02
    • vue组件中如何实现数据传递
      这篇文章给大家分享的是有关vue组件中如何实现数据传递的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体如下:1、props:父组件 -->传值到子组件app.vue是父组...
      99+
      2024-04-02
    • vue如何使用ssr实现预取数据
      这篇文章主要介绍了vue如何使用ssr实现预取数据的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue如何使用ssr实现预取数据文章都会有所收获,下面我们一起来看看吧。Why在 Vue 的服...
      99+
      2023-07-04
    • Vue数据的双向绑定如何实现
      本篇内容介绍了“Vue数据的双向绑定如何实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!实现组件双向数据绑定我们先来看看抛弃 .sync ...
      99+
      2023-07-04
    • Vue中如何实现对Array的数据侦听
      这篇文章给大家分享的是有关Vue中如何实现对Array的数据侦听的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。核心思想通过创建一个拦截器来覆盖数组本身的原型对象Array.pro...
      99+
      2024-04-02
    • Vue数据响应式原理实例代码分析
      本文小编为大家详细介绍“Vue数据响应式原理实例代码分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“Vue数据响应式原理实例代码分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。改造数据我们先来尝试写一个函数...
      99+
      2023-07-04
    • Vue模板语法中如何实现数据绑定
      这篇文章主要为大家展示了“Vue模板语法中如何实现数据绑定”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Vue模板语法中如何实现数据绑定”这篇文章吧。1.单项数...
      99+
      2024-04-02
    • 如何使用vue实现前端导入excel数据
      目录前言一、主界面先引入导入组件二、封装excel-import组件1.首先是template代码(这里用的是ant vue desgin框架的组件)2.引入接口3.js代码meth...
      99+
      2023-05-17
      vue前端导入excel文件 vue导入excel并预览 前端导入excel文件
    • Vue如何实现利用vuex永久储存数据
      目录Vue用vuex永久储存数据基于vuex的数据持久化问题存在问题此问题映射在本项目上的体现解决方法:使用vuex的数据持久化总结Vue用vuex永久储存数据 首先需要在 vue项...
      99+
      2023-05-16
      Vue储存数据 vuex永久储存数据 vuex储存数据
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作