MVVM(双向绑定架构)底层原理函数

HTML代码:
div id=“root”> </div

<script>
        /*    说明: 
                VUE是基于MVVM实现数据双向绑定,通过defineProperty代理data对象所有属性,
                实现属性get/set监听,当数据发生改变触发set及watch,通知节点重绘
    
        */

        //    M
        var data = {
            title: '我会变身'
        }
        // VM
        var _title = data.title;
        Object.defineProperty(data, 'title', {
            // get为获取data数据时执行的函数,切记要将数据return出来!
            get() {
                return _title;
            },
            // set为data数据发生改变时执行的函数
            set(newValue) {
                _title = newValue;  //传参newValue即为函数add里设置的data.name的值
                watch(); //通知观察者执行函数
            }
        })
        // 数据变化监听,通知视图重新渲染
        function watch() {
            render();
        }
        // v
        function render() {
            document.getElementById('root').innerHTML = `
            <h1>${data.title}</h1>
            <button οnclick='add()'>点我变身</button>
        `
        };
        render();
        var flag = true;
        add = function () {
            if (flag) {
                data.title = '我变啦';
                flag = !flag;
            } else {
                data.title = '我会变身';
                flag = !flag;
            }
        }
    </script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值