双向绑定

Posted AngDH

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了双向绑定相关的知识,希望对你有一定的参考价值。

<!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 (){
            console.log(this);
          data[name]=this.value;
        };
      });
  }
  </script>
</html>

 

以上是关于双向绑定的主要内容,如果未能解决你的问题,请参考以下文章

vue双向绑定原理

双向数据绑定和单向数据绑定解释

原生js实现数据双向绑定

mvvm双向绑定机制的原理和代码实现

angularjs系列之双向绑定

微信小程序复杂对象的双向绑定(附代码可直接使用)