• vue双向绑定的原理


    vue双向绑定的原理

    vue.js采用的是数据劫持结合发布和-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调

    Object.defineProperty()这个方法包含三个参数

    
    第一个参数:要设置的目标对象(必填)
    
    第二个参数:需要定义的属性或方法的名称(必填)
    
    第三个参数:目标属性所拥有的特性。(descriptor)(必填)
    
    
    Object.defineProperty(obj, "data", {
          //获取值
          get: function () {return name;},
          //设置值
          set: function (val) {name = val;console.log(val)}
    })
    //赋值调用
    setobj.data = 'aaa';
    //取值调用
    getconsole.log(obj.data);
    **代码演示:**
    **defineProperty的双向绑定**
    var obj={};
    Object.defineProperty(obj, 'val',{
          set:function (newVal) {
          document.getElementById("a").value =newVal==undefined?'':newVal;
          document.getElementById("b").innerHTML=newVal==undefined?'':newVal;}
    });
    document.getElementById("a").addEventListener("keyup",function (e) {obj.val = e.target.value;})
    

    实现mvvm的双向绑定,是采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调。就必须要实现以下几点:

    1、实现一个数据监听器Observer,能够对数据对象的所有属性进行监听,如有变动可拿到最新值并通知订阅者
    2、实现一个指令解析器Compile,对每个元素节点的指令进行扫描和解析,根据指令模板替换数据,以及绑定相应的更新函数
    3、实现一个Watcher,作为连接Observer和Compile的桥梁,能够订阅并收到每个属性变动的通知,执行指令绑定的相应回调函数,从而更新视图
    4、mvvm入口函数,整合以上三者
    
  • 相关阅读:
    第六次上机作业
    NOIP2016 DAY1 T2天天爱跑步
    NOIP2009 T2 Hankson的趣味题
    NOIP2013 DAY2 T3火车运输
    线段树
    NOIP2012 DAY2 T2借教室
    NOIP2015 DAY2 T1跳石头
    NOIP2016 DAY2 T3 愤怒的小鸟
    文本编辑常用快捷键
    洛谷P1516 青蛙的约会
  • 原文地址:https://www.cnblogs.com/mxnl/p/13616549.html
Copyright © 2020-2023  润新知