cppnrchtp://etwalpapers/wallpapers/9/8/f/142771-free-page-wallpapers-2560x1440.jpg/ pvue数据双向绑定原理是通过数据劫持和publisher-publisher模式实现的,首先是通过监听数据,然后告诉订阅者是否更新视图/p。 p/p pmvc模式/p p之前的mvc模式是单向绑定,即模型绑定视图,当我们使用javascript代码更新模型时,它会自动更新/p。 p/p pmvvm模式/p pmvm模式是模型视图模式。它实现视图的更改,自动反映视图,反之亦然。对双向绑定的理解是用户更新视图,模型的数据自动更新,这是双向绑定的情况。此外,一个好的点是在单向绑定的基础上向可输入元素添加一个更改(输入)事件来动态修改模型。/p p/p p双向约束原理/p 通过数据劫持和publisher-juber模式/p的结合实现pvue数据的双向绑定 p我们已经知道,数据的双向绑定是实现的,首先劫持数据,所以我们需要设置一个侦听器来侦听所有的属性。如果属性发生变化,则需要告诉订阅者观察器是否需要更新。由于有许多订阅者,我们需要一个消息订阅者来深入收集这些订阅者,然后在侦听器观察器和订阅器观察器之间统一管理它们。接下来,我们需要一个命令解析器来编译、扫描和解析每个节点元素,将指令(如v-model、v-on)初始化为订阅者监视器,在订阅者监视器接收到对应属性的更改时替换模板数据或绑定相应的函数,然后执行相应的更新函数来更新视图。/p 为了实现数据的双向绑定,我们采用了数据的双向绑定:/p p(1)实现一个侦听器、观察器、劫持和监听所有属性,如果订阅者有变更。/p p(2)实现一个订户调度器,每个订户调度器绑定到一个更新函数,该函数接收属性变更的通知,并执行相应的函数来更新视图。/p p(3)实现每个节点的解析器、编译、扫描和解析相关指令(v-model、v-on等)。如果节点有v-model、v-on等指令,解析器将初始化这些节点的模板数据,以便在视图中显示,然后初始化相应的用户。/p p/p p执行观察员/p p观察器是数据侦听器,实现的核心方法是对象。如果希望侦听所有属性,可以递归遍历所有属性值并执行对象。 p以下代码实现一个观察器。/p 1c1dlping tbody tr tdunctinobservr(数据) p/p p /p pp pvvverelfhi 论坛(资金(基金)/基金) pself.default(data,key,da);/p p);/p p pvppppppppppppp vah, object.define属性(data,key,/p) phumanable:rue,p pconfig/rue,p pget:nctioninter(/p) pi(deep.t) p/p在这里添加一个订阅者 pconsole.log(dep.target)/p pdeed.add子(dep.target);/p p p,/p p/setter,如果更改了对象属性的值,它将触发deep.notify(),//p p通知观察者(订阅者)更改数据并为相应订阅者执行更新功能以更新视图。/p p集fnctinterrnewval/p Pingwalp/p p p/p pvanw/valp p/. pchildobjobse(neval);/p pdeep.notify();/p p/p p);/p p/p p:functionbserve(vau,vm)if!价值

作者 : 奇兔源码吧 本文共2663个字,预计阅读时间需要7分钟 发布时间: 2020-08-1 共10人阅读

类型。objet
p
p
p;/
pfdictiopp
p.sub;/p
p/p
p.protypedtp
pp订阅者/
pparawacher
p//p
p分项:unction(sub)/p
p.sub.push(sub);/p
p/
p通知:unction(p/p)
p每个(基金(分)/
psub.update();/p
p);/p
p/p
p;/p
pdep.targenull;t
/tr
/tbody
/表
作为观察者,当我看到其他人的来源时,我有点误解深度目标的来源,我相信有些人会有同样的问题。没有急事。当你写关于观察者的文章时,你会发现深度目标来自观察者。/p
p实现一个观察器/p
p观察者是用户。用于处理由观察者发送的更新消息,并执行受观察者约束的更新函数。/p
下面的代码实现了一个观察器/p
talbrdlspacking1c1dlping
tbody
tr
tdunctionacher(vm,xp,cb)/p
pher.cccb;/p
p.vvm;/p
p.exp;
p.valueehis.gt();//p
p /p
pwatcheprottyparttppddte
pthi.run();/p
p
pvaaaaaaaaaaaaaaaaaa.a.v.aaaaaaa.a.v.a;p/p
/p
价值!ldval/p
p.vlaue;p
pthi.cb(this.vm.vlue,ldval);/p
p/p
p
p.dep.targther;
pva
在侦听器/p中强制执行get函数
pdep.targtnll;
p
p/p
p;/td
/tr
/tbody
/表
在我研究代码的过程中,我认为最复杂的事情是理解这些函数的参数,这些参数在我输出后很容易理解。vm是后面的自值对象,是vue中nvue对象的等价物。exp是命令v-model或v-on的属性值;单击节点。/p
正如您在上面的代码p中所看到的,在观察者的getter函数中,dep.target指向自己,即观察者对象。在getter函数中,/p
talbrdlspacking1c1dlping
tbody
tr
这个系统在侦听器中执行get函数。/p
要获得vmmstaths.exp,调用对象中的get函数/p。
pget:nctioncter(/p)
pi(dep.t)
p/p在这里添加一个订阅者
pconsole.log(dep.target)/p
pdep.add子(dep.target);/p
p/p
p
p,/td
/tr
/tbody
/表
因此,您可以向订阅者添加观察器,这解决了deep.target从上面的位置的问题。/p
p实现编译/p
p编译的主要功能是遍历n节点节点的所有节点。
如果子节点包含v指令,即元素节点,则将元素添加到侦听器事件中。ifv-on,node.addeventlistener('click'),ifv-model,node.addeventlistener('input')。然后初始化模板元素并创建绑定此元素节点的观察器。/p
p(如果次级方案2是实施mvvm/p
可以说,mvvm是观察者、编译者和观察者的老板,他需要为观察者、编译者和观察者安排事情。
p(1)observer实现劫持mvvm自己的模型数据,监听数据属性的更改,并在发生更改时通知/p
p(2)编译实现指令解析、初始化视图、订阅数据更改和绑定update函数/p
p(3)watcher一方面接收观测器通过深层传输的数据的变化,另一方面通知编译器制作viepdate。/p
最后,抽象这个mvvm,它是vue中vue的构造函数,您可以构造一个vue实例。最后编写一个函数/p的html测试
talbrdlspacking1c1dlping
tbody
tr
td<!doctypt;<html>htmln><<<<</p
p<metautf-8>/p
p<title>self-vue</title></head><p
pap/p
ptext-align:center;p
p</style><body>
p<divapp>
p<h2>title</h2>/p
p<inpuv-model>/p
p<h1>name</h1>/p
p<按钮n:单击“clickme”>按e!</butt>/p
p</div></body><><scripsrcj/observer.js></script>/p
p<scripps&rc"js/watcher.js"></scriptgt;/p
p<scripps&rc"js/compile.js"></scriptgt;/p
p<scrippsrc"jsvvm.js"></scripps>/p
p<scrippt"text/javascript">/p
pvappnewefvup
pel:app',/p
p数据:/p
p标题:hello,orld'/p
p名称:canfo'/p
p,/p
方法:/p
pclickme:unctio
p.ttlherld';/p
p/p
p,/p
pmount:functiop
pwindowset超时(.)gt;/p
这个。你好!
p,000);p
p/p
;</script>></html>/td
/tr
/tbody
/表
p首先在mvm(...)、mvvvm.js、/p中执行new
pobsever(this.data);/p
pneompile(options.el,hir);p
p初始化侦听器观察器,以侦听对象的数据属性的值。/p
然后初始化parsercompile,绑定节点,并解析v-
p初始化相应的订阅者,并将订阅者添加到订阅者(dep)中。这支持双向绑定。/p
p-if-model绑定元素,/p
p<inpuv-model>/p
p输入框的值更改和编译中的触发器/p
talbrdlspacking1c1dlping
tbody
tr
tdnode.addeventlistener',functionn(e)p)
pvaneee,ee.tat.value;/p
pivalneevalue/p
p
p/p
pelf.pmmewvue;p
pvaewvalu/p
(p);/td
/tr
/tbody
/表
pelf.elf.zasvsnewvue;这个语句触发mvvm中的自值选择,并在观察器中触发侦听器到objet.denificeproperty()中对象的名称属性。/p
psetter中有一个函数,它通知订阅者deep.notification,watcher在通知后执行绑定更新函数。/p
p的最终结果是:/p
p/p
以上是本文的全部内容,希望能帮助您学习,也希望您更多的支持。/p
p/p

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,请不要用于商业用途!
3. 如果你也有好源码或者教程,可以到审核区发布,分享有金币奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"www.qitupic.com",如遇到无法解压的请联系管理员!

请激活正版授权 » cppnrchtp://etwalpapers/wallpapers/9/8/f/142771-free-page-wallpapers-2560x1440.jpg/ pvue数据双向绑定原理是通过数据劫持和publisher-publisher模式实现的,首先是通过监听数据,然后告诉订阅者是否更新视图/p。 p/p pmvc模式/p p之前的mvc模式是单向绑定,即模型绑定视图,当我们使用javascript代码更新模型时,它会自动更新/p。 p/p pmvvm模式/p pmvm模式是模型视图模式。它实现视图的更改,自动反映视图,反之亦然。对双向绑定的理解是用户更新视图,模型的数据自动更新,这是双向绑定的情况。此外,一个好的点是在单向绑定的基础上向可输入元素添加一个更改(输入)事件来动态修改模型。/p p/p p双向约束原理/p 通过数据劫持和publisher-juber模式/p的结合实现pvue数据的双向绑定 p我们已经知道,数据的双向绑定是实现的,首先劫持数据,所以我们需要设置一个侦听器来侦听所有的属性。如果属性发生变化,则需要告诉订阅者观察器是否需要更新。由于有许多订阅者,我们需要一个消息订阅者来深入收集这些订阅者,然后在侦听器观察器和订阅器观察器之间统一管理它们。接下来,我们需要一个命令解析器来编译、扫描和解析每个节点元素,将指令(如v-model、v-on)初始化为订阅者监视器,在订阅者监视器接收到对应属性的更改时替换模板数据或绑定相应的函数,然后执行相应的更新函数来更新视图。/p 为了实现数据的双向绑定,我们采用了数据的双向绑定:/p p(1)实现一个侦听器、观察器、劫持和监听所有属性,如果订阅者有变更。/p p(2)实现一个订户调度器,每个订户调度器绑定到一个更新函数,该函数接收属性变更的通知,并执行相应的函数来更新视图。/p p(3)实现每个节点的解析器、编译、扫描和解析相关指令(v-model、v-on等)。如果节点有v-model、v-on等指令,解析器将初始化这些节点的模板数据,以便在视图中显示,然后初始化相应的用户。/p p/p p执行观察员/p p观察器是数据侦听器,实现的核心方法是对象。如果希望侦听所有属性,可以递归遍历所有属性值并执行对象。 p以下代码实现一个观察器。/p 1c1dlping tbody tr tdunctinobservr(数据) p/p p /p pp pvvverelfhi 论坛(资金(基金)/基金) pself.default(data,key,da);/p p);/p p pvppppppppppppp vah, object.define属性(data,key,/p) phumanable:rue,p pconfig/rue,p pget:nctioninter(/p) pi(deep.t) p/p在这里添加一个订阅者 pconsole.log(dep.target)/p pdeed.add子(dep.target);/p p p,/p p/setter,如果更改了对象属性的值,它将触发deep.notify(),//p p通知观察者(订阅者)更改数据并为相应订阅者执行更新功能以更新视图。/p p集fnctinterrnewval/p Pingwalp/p p p/p pvanw/valp p/. pchildobjobse(neval);/p pdeep.notify();/p p/p p);/p p/p p:functionbserve(vau,vm)if!价值

常见问题FAQ