数据驱动视图简单实现-新篇

作者: 前端C罗 | 来源:发表于2016-06-01 10:59 被阅读231次

上一篇文章中,我们一起了解了vue.js的数据驱动视图的机制,也使用Object.defineProperty制作了一个简单的实现demo,在跟举总(Topcss)聊完以后,脑袋中灵光一闪,想到了ES6的代理,没错,就是代理。

Angularjs使用轮巡来检查数据,vue.js使用消息机制,我们可以设想如下场景:

小明的朋友给他寄了一份包裹,现在小明要领包裹。

Angularjs告诉小明,你要每隔一个小时去物流配送点那里看一下,看到包裹了就领回家;vue.js告诉小明,你就在家看电视吧,包裹到了快递员给你打电话,你去取一下。那我们今天要聊聊代理的方法,就是小明直接给快递员打电话,让包裹到了直接送到家就行了。

跟上一篇一样,我们来看看简单实现的代码

首先,我们在页面上放置一个简单的视图

<h1>你好:<span id="target">世界</span></h1>

接下来,我们来设置数据模型并且将数据模型跟视图进行驱动绑定

"use strict";
document.addEventListener('DOMContentLoaded',function () {    
        //数据    
        var data = {        
                name : '前端C罗'    
        };    
        //视图容器    
        var el = document.getElementById('target');    
        //对数据进行代理    
        function bind(el,data) {        
                var p = new Proxy(data,{            
                        get : function (targt , key ,receiver) {                
                                //el.innerHTML = targt[key];                
                                return Reflect.get(targt , key ,receiver);            
                        },            
                        set : function (targt , key ,receiver) {                
                                //判断数据是否发生变化               
                                el.innerHTML = targt[key];                
                                return Reflect.set(targt , key ,receiver);            
                         }        
                });        
                return p;    
        }    
        //绑定    
        data = bind(el,data);    
        setTimeout(function () {        
                //数据发生变化        
                data.name = '前端迷途者';    
        },1000);
});

在上面的代码中,我们对数据data进行了代理包装,并且返回代理对象,所有对数据对象data的操作就会被代理捕获,并且交由代理来处理数据的变化,那么当我们在数据变化的时候要求代理去更新相应的视图即可达到数据驱动视图的目标。同时,代理还可以对数据进行更多的控制,比如对某些数据进行写保护,不允许外部对数据的某些属性进行写的操作等。

随着js本身的发展,我们能够完成越来越多更复杂的机制(在效率更高的情景下),但是受限于浏览器的支持,一些很强大的功能暂时只能在有限的平台上使用,但是我相信美好的东西必将得到普及。

小菜的日常,望共勉。

相关文章

  • 数据驱动视图简单实现-新篇

    上一篇文章中,我们一起了解了vue.js的数据驱动视图的机制,也使用Object.defineProperty制作...

  • 数据驱动视图简单实现

    前端框架日新月异,Angularjs的MVVM模式风靡全球,React的MV模式也被大家捧得火热。我不知道有多少人...

  • Vue MVVM理解及实现

    简单地说就是数据驱动视图,视图改变(事件)也可以改变数据,就是双向绑定的概念。 实现 为了监听数据的改变,从而响应...

  • 怎样将数据变成响应式数据

    响应式数据 响应式数就是数据在变化的时候,会驱动视图更新,简单来说就是数据驱动视图更新。 当数据没有初始化,直接修...

  • 亲自实现一个简单的类 Vue 框架 —— 简单的数据驱动视图

    看过上一节的小伙伴肯定已经知道了这次的主要内容——实现数据更新驱动页面视图 数据驱动视图的基本构想 我们已经实现了...

  • Vue MVVM 原理实现

    核心原理 MVVM 双向数据绑定, 数据驱动视图 Vue 实现 MVVM 采用 数据劫持 + 发布订阅模式 : ...

  • VUE基本使用

    vue简介 vue.js的数据驱动视图是基于MVVM模型实现的 model 代表数据 view 代表视图模板 vi...

  • React Mobx常用简介

    Mobx是以数据驱动视图,通过简单的数据绑定,我们只需要修改数据本身,便可自动更新视图 @observer 定义一...

  • 数据驱动视图

    数据驱动视图的思想,不去操作视图,而是操作数据,通过数据来渲染视图。 简单的一句话,其实是数据的逻辑思路。 譬如,...

  • vue原理

    组件化 数据驱动视图传统组件,只是静态的渲染,更行还是依赖于操作DOM数据驱动视图--Vue(MVVM)数据驱动视...

网友评论

    本文标题:数据驱动视图简单实现-新篇

    本文链接:https://www.haomeiwen.com/subject/oddhdttx.html