最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • vue数据双向绑定理解(与MVVM理解)

    正文概述 掘金(前端高龄小白)   2021-01-18   406

    一、含义

    Vue是采用数据劫持结合发布/订阅模式的方式,通过Object.defineProperty()来劫持各个属性的settergetter,在数据变动时发布消息给订阅者,触发相应的监听回调。

    那么,问题来了,getter和setter是什么?object.defineproperty()方法作用?

    ①、对象有两种属性:(1)数据属性,就是我们经常使用的属性(2)访问器属性,也称存取器属性(存取器属性就是一组获取和设置值的函数)

    打印如下代码:

    const obj = { a:1,b:2 }
    console.log(obj)
    

    结果如下:

    vue数据双向绑定理解(与MVVM理解)

    数据属性就是a和b,存取器属性对应set和get关键字。

    get对应的方法称为getter,负责获取值,它不带任何参数。set对应的方法为setter,负责设置值,在它的函数体中,一切的return都是无效的。

    ②、Object.defineProperty作用为定义新属性或修改原有的属性

    语法:Object.defineProperty(obj, prop, descriptor)

    参数:obj:必需。目标对象;

              prop:必需。需定义或修改的属性的名字;

              descriptor:必需。目标属性所拥有的特性;

    插一条对MVVM理解

    MVVM:

    M:Model 很简单,就是业务逻辑相关的数据对象,通常从数据库映射而来,我们可以说是与数据库对应的model。

    V:view 也很简单,就是展现出来的用户界面。

    VM: viewModel 负责把Model的数据同步到view显出来,还负责把view修改同步到Model。

    vue数据双向绑定理解(与MVVM理解)

    各部分之间的通信,都是双向的。 View 与 Model 不发生联系,都通过ViewModel传递。

    继续讲解双向绑定问题:

    vue数据双向绑定理解(与MVVM理解)

    上图中的observer,它的作用是对每个vue中的data中定义的属性循环用Object.defineProperty()实现数据劫持,以便利用其中的setter和getter,然后通知订阅者,订阅者会触发它的update方法,对视图进行更新。

    上图中的compile,它的作用主要做的事情是解析模板指令,将模板中的变量替换成数据。

    compile工作的时间是:

    1.初始化页面的时候

    **2.**将每个指令对应的节点绑定更新函数,添加监听数据的订阅者

    Dep负责维护依赖,而订阅者则来自于compile,一旦有数据变动,则会通过Watcher绑定更新函数,此时Watcher也向Dep中添加了订阅者,一旦Dep接到Observer的通知,它就会再去通知WatcherWatcher则会调用自身的update()方法,并触发Compile中绑定的回调,更新视图;

    参考大佬链接:www.cnblogs.com/webcabana/p…


    起源地下载网 » vue数据双向绑定理解(与MVVM理解)

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元