• 双向数据绑定实现原理


    vm的核心是view 和 data 
    
    当data 有变化的时候它通过Object.defineProperty()方法中的set方法进行监控,并调用在此之前已经定义好data 和view的关系了的回调函数,来通知view进行数据的改变
    而view 发生改变则是通过底层的input 事件来进行data的响应更改
    
    

      

    双向数据绑定实现原理

    用到了input事件(只要往input框中输入内容就会触发)以及ES5中Object.defineProperty()

    怎么直到对象的数据发生改变:

      1.angular1中用脏数据检查机制(用定时器)轮询;缺点:性能低,可以兼容ie8

      2.vue中数据劫持,用到ES5中Object.defineProperty()

    下面代码使用vue中的方法实现的数据劫持

      <p></p>
      <input type="text">
    

      

      <script>
        let p = document.querySelector('p');
        let inp = document.querySelector('input');
        let obj = {
          msg: 'hello'
        }
    
        p.innerText = obj.msg
        inp.value = obj.msg
    
        //实现视图变化数据跟着变化
        inp.oninput = function () {
          // console.log(inp.value);  
          obj.msg = inp.value
          // console.log(obj.msg);
        }
    
        //实现数据变化视图跟着变化
        let temp = obj.msg
        Object.defineProperty(obj, 'msg', {
          get() {//get方法会劫持msg这个属性的获取操作
            return temp
          },
          set(value) {//set方法会劫持msg这个属性的设置操作
            temp = value
            p.innerText = temp
            inp.value = temp
          }
        })
    
      </script>
    

      

  • 相关阅读:
    POJ 3349 HASH
    POJ 1840 HASH
    POJ 2785 HASH
    HDU 3926 图的同构
    POJ 2549 二分+HASH
    POJ 2002 统计正方形 HASH
    POJ 1971 统计平行四边形 HASH
    POJ 1635 树的最小表示法/HASH
    POJ 1200 字符串HASH
    ACM学习历程—HDU 1272 小希的迷宫(并查集)
  • 原文地址:https://www.cnblogs.com/lixiaoxue/p/11098277.html
Copyright © 2020-2023  润新知