js proxy 代理模拟vue实现数据双向绑定

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Proxy vue 双向绑定</title>
  </head>

  <body>
    <div id="app">
      <h3 id="papagraph"></h3>
      <input type="text" id="input" />
    </div>
  </body>
</html>

<script>
  const papagraph = document.getElementById(‘papagraph‘);
  const input = document.getElementById(‘input‘);

  const data = {
    text: ‘hello‘
  }

  const handler = {
    set: function(target, prop, value) {
      if (prop === ‘text‘) {
        target[prop] = value
        papagraph.innerHTML = value
        return true;
      } else {
        return false;
      }
    }
  }

  const myTest = new Proxy(data, handler);

  input.addEventListener(
    ‘input‘,
    e => {
      myTest.text = e.target.value;
    },
    false
  )

</script>

  

原文地址:https://www.cnblogs.com/wilsunson/p/10280514.html

时间: 2024-10-07 07:26:46

js proxy 代理模拟vue实现数据双向绑定的相关文章

Vue实现数据双向绑定的原理

Vue实现数据双向绑定的原理:Object.defineProperty() vue实现数据双向绑定主要是:采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应监听回调.当把一个普通 Javascript 对象传给 Vue 实例来作为它的 data 选项时,Vue 将遍历它的属性,用 Object.defineProperty 将它们转为 getter/setter.用户看不

vue中数据双向绑定的实现原理

vue中最常见的属v-model这个数据双向绑定了,很好奇它是如何实现的呢?尝试着用原生的JS去实现一下. 首先大致学习了解下Object.defineProperty()这个东东吧! * Object.defineProperty() * 对对象的属性进行 定义/修改 * */ let obj = {x:10} // 这两种方式都相对来说比较简单,直接,但是有些时候我们需要对对象的属性的修改和增加进行必要的干预 // obj.y = 20; // obj.x = 100; // obj.x =

VUE的数据双向绑定

1.概述 让我们先来看一下官网的这张数据绑定的说明图: 原理图告诉我们,a对象下面的b属性定义了getter.setter对属性进行劫持,当属性值改变是就会notify通知watch对象,而watch对象则会notify到view上对应的位置进行更新(这个地方还没讲清下面再讲),然后我们就看到了视图的更新了,反过来当在视图(如input)输入数据时,也会触发订阅者watch,更新最新的数据到data里面(图中的a.b),这样model数据就能实时响应view上的数据变化了,这样一个过程就是数据的

angular.js 中同步视图和模型数据双向绑定,$watch $digest $apply 机制

Angular.js 中的特性,双向绑定. 让视图的改变直接反应到数据中,数据的改变又实时的通知到视图,如何做到的? 这要归功于 scope 下面3个重要的方法: $watch $digest $apply 他们的区别是什么,我们来介绍下: $watch 这是一个监听 scope 上数据的监听器 方法说明: $scope.$watch('参数',function(newValue,oldValue){ //逻辑处理 }) 上面我们就是创建了一个监听器. ‘参数’ 就是$scope对象下的一个对象

一、vue的数据双向绑定的实现

响应式系统 一.概述 Vue通过设定对象属性的 setter/getter 方法来监听数据的变化,通过getter进行依赖收集,而每个setter方法就是一个观察者,在数据变更的时候通知订阅者更新视图. 双向数据绑定,简单点来说分为三个部分: 1.Observer.这里的主要工作是递归地监听对象上的所有属性,在属性值改变的时候,触发相应的watcher. 2.Watcher.观察者,当监听的数据值修改时,执行响应的回调函数(Vue里面的更新模板内容). 3.Dep.连接Observer和Watc

vue中数据双向绑定注意点

最近一个vue和element的项目中遇到了一个问题: 动态生成的对象进行双向绑定是失败 直接贴代码: <el-form :model="addClass" :rules="rules" ref="addClass"> <el-form-item label="表单分类名称" prop="NAME" :label-width="formLabelWidth"> &

Vue数据双向绑定(面试必备) 极简版

我又来吹牛逼了,这次我们简单说一下vue的数据双向绑定,我们这次不背题,而是要你理解这个流程,保证读完就懂,逢人能讲,面试必过,如果没做到,请再来看一遍,走起: 介绍双向数据之前,我们先解释几个名词: 1.setter.getter 答:首先,别误以为他们就是一会要说的get.set, 原文地址:https://www.cnblogs.com/webcabana/p/11077628.html

深入理解Proxy 及 使用Proxy实现vue数据双向绑定

阅读目录 1.什么是Proxy?它的作用是? 2.get(target, propKey, receiver) 3.set(target, propKey, value, receiver) 4.has(target, propKey) 5.construct(target, args, newTarget): 6.apply(target, object, args) 7.使用Proxy实现简单的vue双向绑定 回到顶部 1.什么是Proxy?它的作用是? 据阮一峰文章介绍:Proxy可以理解

原生js实现数据双向绑定

最近接触了vue,在谈到vue等等的mvvm框架之前,先了解什么是数据双向绑定以及如何利用原生JS实现数据双向绑定 单向数据绑定 指先把模板写好,然后把模板和数据(数据可能来自后台)整合到一起形成HTML代码,然后把这段HTML代码插入到文档流里 缺点:一旦HTML代码生成就没有办法改变,如果有新数据重新传入,就必须重新把模板和数据整合到一起插入到文档流中 数据双向绑定 数据模型和视图之间的双向绑定,用户在视图上的修改会自动同步到数据模型中,同样的,如果数据模型中的值发生变化,也会同步到视图中去