博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用 proxy 实现简易的vue的双向数据绑定
阅读量:5361 次
发布时间:2019-06-15

本文共 1066 字,大约阅读时间需要 3 分钟。

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

转载于:https://www.cnblogs.com/x-yy/p/11061835.html

你可能感兴趣的文章
洛谷P1005 矩阵取数游戏
查看>>
在Silverlight中使用HierarchicalDataTemplate为TreeView实现递归树状结构
查看>>
无线通信基础(一):无线网络演进
查看>>
关于python中带下划线的变量和函数 的意义
查看>>
linux清空日志文件内容 (转)
查看>>
Servlet接收JSP参数乱码问题解决办法
查看>>
Ajax : load()
查看>>
MySQL-EXPLAIN执行计划Extra解释
查看>>
Linux自己安装redis扩展
查看>>
luoguP3414 SAC#1 - 组合数
查看>>
图片点击轮播(三)-----2017-04-05
查看>>
直播技术细节3
查看>>
《分布式服务架构:原理、设计于实战》总结
查看>>
java中new一个对象和对象=null有什么区别
查看>>
字母和数字键的键码值(keyCode)
查看>>
IE8调用window.open导出EXCEL文件题目
查看>>
Spring mvc初学
查看>>
VTKMY 3.3 VS 2010 Configuration 配置
查看>>
01_1_准备ibatis环境
查看>>
windows中修改catalina.sh上传到linux执行报错This file is needed to run this program解决
查看>>