码迷,mamicode.com
首页 > 其他好文 > 详细

实现Vue-MVVM-step1

时间:2018-08-01 18:25:03      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:nbsp   取值   方式   head   charset   创建   element   改变   setter   

技术分享图片

一个利用defineProperty实现的MVVM双向数据绑

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Vue-MVVM</title>
    </head>
    <body>
        <input type="text" id="input1" value="" oninput="myFun()" />
        <input type="text" id="input2" />
    </body>
    <script>
        function myFun() {
            o._data.test = document.getElementById(input1).value
        }
        /* 这个函数用来模拟视图更新 */
        function cb(val) {
            console.log(试图更新啦~~);
            document.getElementById(input2).value = val
        }
        /* 遍历所有属性的方式对该对象的每一个属性都通过 defineReactive  */
        function observer(value) {
            if (!value || (typeof value !== object)) {
                return;
            }
            Object.keys(value).forEach((key) => {
                defineReactive(value, key, value[key]);
            })
        }
        /* 实现对对象的「响应式」 */
        function defineReactive(obj, key, val) {
            Object.defineProperty(obj, key, {
                enumerable: true,        // 能否被遍历,比如 for in,默认值为 false
                configurable: true,        // 描述该属性的描述符能否被改变,默认值为 false
                get: function reactiveGetter() {        // 取值的时候调用,默认值为 false
                    return val;
                },
                set: function reactiveSetter(newVal) {        // 设置值的时候使用
                    if (newVal === val) return;
                    cb(newVal);
                }
            });
        }
        /* 声明类 */
        class Vue {
            constructor(options) {
                this._data = options.data;
                observer(this._data)
            }
        }
        /* 创建实例 */
        var o = new Vue({
            data: {
                test: ""
            }
        })
    </script>
</html>

 

实现Vue-MVVM-step1

标签:nbsp   取值   方式   head   charset   创建   element   改变   setter   

原文地址:https://www.cnblogs.com/RuMengkai/p/9402500.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!