zoukankan      html  css  js  c++  java
  • 解vue的数据binding原理(转)

    <!DOCTYPE html>
    <html>
    <head>
    <title>ideal</title>
    <meta charset="utf-8">
    </head>
    <body>
    <input class="test" type="text" name="asd" onkeyup="handleChange()" v-model="hey">
    <input class="test" type="" name="" onkeyup="handleChange()" v-model="msg">
    <script type="text/javascript">
    //定义一个变量
    var bindingMark = 'data-element-binding'

    function Element(classa, initData) {
    console.log("this zhi");
    console.log(this);
    var self = this,

    el = self.el = document.getElementsByClassName(classa),//多个input改为class
    bindings = {}
    data = self.data = {}
    for (var i = 0; i < el.length; i++) {
    content = el[i].outerHTML.replace(/v-model="(.*)"/g, markToken);

    //设置默认值
    el[i].outerHTML = content
    }
    for (var variable in bindings) {
    bind(variable);
    }
    if (initData) {
    for (var variable in initData) {
    data[variable] = initData[variable]
    }
    }


    function markToken(match, variable) {
    bindings[variable] = {}
    return bindingMark + '="' + variable + '"' //内填一个span变为只改它的元素
    }

    function bind(variable) {

    bindings[variable].els = document.querySelectorAll('[' + bindingMark + '="' + variable + '"]')//document获取binding元素
    ;
    Object.defineProperty(data, variable, {
    set: function (newVal) {
    [].forEach.call(bindings[variable].els, function (e) {
    bindings[variable].value = e.value = newVal //=>textContent改为input的value
    })
    },
    get: function () {
    return bindings[variable].value
    }
    })
    }
    }

    var app = new Element('test', {
    msg: 'hello',
    hey: 'aaa'
    })

    function handleChange(e) { //增加v=>m的绑定


    e = e || window.event
    var key = e.target.outerHTML.match(/data-element-binding="(.*)"/)[1];
    console.log("outerHTML")
    console.log(e.target.outerHTML);
    console.log("key: " + key);
    data[key] = e.target.value
    console.log(data.hey, data.msg);
    }
    </script>
    </body>
    </html>


    ------------------------------------
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title></title>
    </head>
    <body>
    <input type="text" id="aa"/>
    <span id="bb">{{hello}}</span>
    <script>
    var obj = {};
    Object.defineProperty(obj,'hello',{
    set:function(val){
    document.getElementById('bb').innerHTML = val;
    document.getElementById('aa').value = val;
    }
    });
    document.getElementById('aa').onkeyup = function(e){
    obj.hello = e.target.value;
    };
    obj.hello = "";
    </script>
    </body>
    </html>


    https://www.cnblogs.com/dh-dh/p/5606596.html

  • 相关阅读:
    caffe 学习(1) —— Classification: Instant Recognition with Caffe
    Latex 编辑器安装
    Ubuntu 14.04上安装caffe
    学习换脸:Switching Eds: Face swapping with Python, dlib, and OpenCV
    如何给磁盘文件排序?--学习《编程珠玑》
    android五种数据存储方式
    PAML学习一
    Google TensorFlow 学习笔记一 —— TensorFlow简介
    mfc学习笔记
    新建标准库
  • 原文地址:https://www.cnblogs.com/geekjsp/p/9550172.html
Copyright © 2011-2022 走看看