美文网首页
proxy和双向数据绑定

proxy和双向数据绑定

作者: Allan要做活神仙 | 来源:发表于2019-02-16 14:23 被阅读2次

通俗讲,Proxy代理是构造函数,返回Proxy对象!
用于 从外部 控制对 对象内部访问!!!

举个例子:我们创建target对象,有以下2个属性:

const target = {
    a:1,
    b:2
};

创建handler对象拦截所有的get操作,如果target里有该属性,就返回它,没有就输出数字:37

let handler = {
    get: function (target, name) {
         return (
             name in target ? target[name] : 37
    )
    }
}

现在,我们通过传递 targethandler对象来创建一个新的代理。我们的代码可以与代理交互,而不是直接访问目标对象

const proxy = new Proxy(target, handler);
console.log(proxy.a);  //1 proxy代理了target对象
console.log(proxy.b);  //2
console.log(proxy.random);  //100

为什么不直接访问?应该是为了能控制它吧。

双向数据绑定

举例:input输入和let obj={a:1, b:2}
双向:
1、inputjs(对象)
2、js(对象)到 input

  • 1简单的,不说了,通过addEventListener``inputoninput or onchange事件来改变对象的值

  • 2用 proxy 来监听对象的改变来给inputvalue赋值。

const obj = {
  id:'inputName',
  name:''  //用来存储和更新 input 的 value 值
};

// 第二步:在js代码中修改myUse.name时,跟新input里的内容,这一步略微复杂,但是proxy代理提供了一个解决方案

    const inputHandler = {
            set: function (target, prop, newValue) {
                console.log(target, prop, newValue)
                if(prop =='name' && target.id ) { //prop指的是传入的对象里的属性:
                    //更新对象的属性
                    target[prop] = newValue;
                    

                    
                    // ############## 关键点 ##################

                    document.getElementById(target.id).value = newValue;

                    // ############## 关键点 ##################



                    return true;  //set方法返回值只有false或true;
                }
                else return false;
            }
        };

  // 创建 proxy
  const myUserProxy = new Proxy(myUser, inputHandler);
  myUserProxy.name = 'Lily';

  var myArea = document.getElementById('myArea');
  //初始textarea的值先给input框
  var input = document.getElementById('inputName');

  input.value = myArea.value;

  function getChange() {
      myUserProxy.name = myArea.value;
  }
  myArea.oninput = function () {
        getChange()
  }
屏幕快照 2019-02-16 下午2.23.16.png

ps:

let handler = {
  get: function(target, name){
    return name in target? target[name] : 37
  }
}

let p = new Proxy({},handler);
p.a = 1;

console.log(p.a) // 1
console.log(p.b)  // 37

相关文章

  • proxy和双向数据绑定

    通俗讲,Proxy代理是构造函数,返回Proxy对象!用于 从外部 控制对 对象内部 的访问!!! 举个例子:我们...

  • Vue之表单双向数据绑定和组件

    三、表单双向数据绑定和组件 目录:双向数据绑定、组件 1.双向数据绑定 1)什么是双向数据绑定Vue.js是一个M...

  • [转] DataBinding 数据绑定

    数据绑定分为单项绑定和双向绑定两种。单向绑定上,数据的流向是单方面的,只能从代码流向 UI;双向绑定的数据是双向的...

  • es6- Proxy 结合原生js/或jQuery实现vue的数

    点击查看基础Proxy认知 这篇我们集中如何使用js实现类似vue的简单数据双向绑定; 拿input和textar...

  • 实现双向绑定Proxy比defineproperty优劣如何

    面试官: 实现双向绑定Proxy比defineproperty优劣如何? 面试官系列(4): 实现双向绑定Prox...

  • Vue和React数据绑定对比

    在数据绑定上来说,vue的特色是双向数据绑定,而在react中是单向数据绑定。 一 单向和双向数据绑定其实不是完全...

  • Vue 中的双向数据绑定

    双向绑定 单向数据流 双向绑定 or 单向数据流 Vue 是单向数据流,不是双向绑定 Vue 的双向绑定是语法糖 ...

  • 双向绑定

    实现双向绑定Proxy比defineproperty优劣如何? 关于双向绑定,其实只要涉及到MVVM框架就不得不提...

  • vue中事件绑定的原理

    vue中事件的绑定机制分为两种:单向数据绑定和双向数据绑定1.单向数据绑定用v-bind,可以缩写为“:”2.双向...

  • Vue双向数据绑定v-model

    v-model 数据双向绑定用作双向数据绑定 一、组件内部双向数据绑定 1、在实例的data中,设置content...

网友评论

      本文标题:proxy和双向数据绑定

      本文链接:https://www.haomeiwen.com/subject/topbeqtx.html