zoukankan      html  css  js  c++  java
  • 利用 proxy 实现简易的vue的双向数据绑定

    //  let p = new Proxy(target, handler);
    //  参数target
    //   用Proxy包装的目标对象(可以是任何类型的对象,包括原生数组,函数,甚至另一个代理)。
    //  参数handler
    //      一个对象,其属性是当执行一个操作时定义代理的行为的函数。
    <!DOCTYPE html>
    <html lang="en" dir="ltr">
      <head>
        <meta charset="utf-8">
        <title></title>
      </head>
      <body>
        <div id="div1">
          <input type="text" v-model="name"><br>
           姓名:{{name}}<br>
           年龄:{{age}}
        </div>
      </body>
      <script>
      let el=document.getElementById('div1');
      let template=el.innerHTML;
      let _data={
        name: 'blue',
        age: 18
      };
      let data=new Proxy(_data, {
        set(obj, name, value){
          //alert(`有人视图设置 ${name}=>${value}`);
          obj[name]=value;
          //数据变了
          //console.log('数据变了');
          render();
        }
      });
      render();
      function render(){
        //渲染
        el.innerHTML=template.replace(/{{w+}}/g, str=>{
          str=str.substring(2, str.length-2);
          return _data[str];
        });
        //找所有的v-model
        Array.from(el.getElementsByTagName('input'))
          .filter(ele=>ele.getAttribute('v-model'))
          .forEach(input=>{
           
            let name=input.getAttribute('v-model');
            input.value=_data[name];
            input.oninput=function (){
              data[name]=this.value;
            };
          });
      }
      </script>
    </html>
  • 相关阅读:
    HTML5边玩边学(2)
    Get Mac NetBIOS
    NetBios协议详解及网上邻居工作原理
    DXperience Universal 10.1.6
    HTML5边玩边学(1)
    《UML和模式应用》读书笔记(二)
    static instance examples
    自己写的虚拟主机管理系统..和大家分享
    一个不错的net的User Interface Components
    Infragistics系列控件
  • 原文地址:https://www.cnblogs.com/x-yy/p/11061835.html
Copyright © 2011-2022 走看看