zoukankan      html  css  js  c++  java
  • JS 双向数据绑定、单项数据绑定

    简单的双向数据绑定

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
    <input type="text" id="aa"/>
    <span id="bb" style="border: 2px solid orange;margin-left: 20px;">{{hello}}</span>
    <br>
    <br>
    <input type="text" id="cc"/>
    
    <script>
        // 双向数据绑定的原理:属性拦截
        // 属性拦截实现方式 : 使用Object.defineProperty()将对象的属性变成访问器属性。
    
        var obj = {};
        Object.defineProperty(obj, 'hello', {
            enumerable: true,
            configurable: true,
            get: function () { // 拿到最新的值
                return document.getElementById('aa').value;
            },
            set: function (val) { // 设置最新的值
                document.getElementById('bb').innerHTML = obj.hello;
                document.getElementById('cc').value = obj.hello;
            }
        });
        Object.defineProperty(obj, 'hello2', {
            enumerable: true,
            configurable: true,
            get: function () {
                return document.getElementById('cc').value;
            },
            set: function (val) {
                document.getElementById('aa').value = obj.hello2;
                document.getElementById('bb').innerHTML = obj.hello2;
            }
        });
        document.getElementById('aa').onkeyup = function () {
            obj.hello = this.value;
        };
        document.getElementById('cc').onkeyup = function () {
            obj.hello2 = this.value;
        };
        obj.hello = ""; //属性名必须设置为空,否则在使用插值表达式的时候直接会把插值表达式显示出来
        obj.hello2 = ""; //属性名必须设置为空,否则在使用插值表达式的时候直接会把插值表达式显示出来
    </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" style="border: 2px solid orange;margin-left: 20px;">{{hello}}</span>
    
    <script>
        // 双向数据绑定的原理:属性拦截
        // 属性拦截实现方式 : 使用Object.defineProperty()将对象的属性变成访问器属性。
    
        var obj = {};
        Object.defineProperty(obj, 'hello', {
            enumerable: true,
            configurable: true,
            get: function () {
                return document.getElementById('aa').value;
            },
            set: function (val) {
                document.getElementById('bb').innerHTML = obj.hello;
            }
        });
    
        document.getElementById('aa').onkeyup = function () {
            obj.hello = this.value;
        };
    
        obj.hello = ""; //属性名必须设置为空,否则在使用插值表达式的时候直接会把插值表达式显示出来
    </script>
    </body>
    </html>
  • 相关阅读:
    比官方文档更易懂的Vue.js教程!包你学会!
    张腾:腾讯云融合通信应用场景及案例分享
    你大概走了假敏捷:《手绘敏捷宝典》在此,还不来收!
    这个PHP无解深坑,你能解出来吗?(听说能解出来的都很秀)
    从小数学就不及格的我,竟然用极坐标系表白了我的女神!(附代码)
    epoll
    hash_map
    BloomFilter
    Wrapper模式(Decorator模式)
    setvbuf
  • 原文地址:https://www.cnblogs.com/haohaogan/p/15700295.html
Copyright © 2011-2022 走看看