Vue公司从使用源实现教程详细解释
环境建设项目GitHub地址
该项目涉及的JSON仿真服务器得到请求和Vue使用路由器;
在Vue公司的生命周期和Vue路由器钩子函数的详细解决方案
生命周期
1版
1。哪种生命周期接口
初始化
创建
beforecompile
编译
准备好了
用
独立的
beforedestory
破坏
2。执行顺序
1。不保活
进入 uff1a
初始化->创建-> beforecompile -> ->连接->准备遵守
搬出去:
beforedestory ->分离->破坏;
2。保持活着
第一次
进入 uff1a
初始化->创建-> beforecompile -> ->连接->准备遵守
搬出去:
独立的;
每一次之后
进入 uff1a
用
搬出去:
独立的
钩
3是什么。钩子函数
数据
activete
停用
激活
candeactivate
4。执行顺序
进入 uff1a
激活-> actiavte ->日期
搬出去:
candeactivate -> deactiavte
他们两个都出现在一起。
5、一个组件,有子当组件的移动和移动,钩子函数的执行顺序如下:
例如
a.vue
注:以下括号嵌套的子
1。不保活:
进入:
1。激活;
2。初始化;
三.创建;
4。beforecompile;
5。(嵌岩部分:初始化,创建,beforecompile,编译);
6。编译;
7。激活;
8。数据;
9。附属的;
10。(附属组件);
11。(子组件就绪);
12。准备好了;
搬出去:
13。candeactivate;
14。停用;
15。beforedestroy;
16。(子组件beforedestroy);
17。(子构件破坏);
18。独立的;
19。(子组件分离);
20。破坏;
2。保持活力:
进入:
1。激活;
2。激活;
三.数据;
4。附属的;
5。(附属组件);
搬出去:
6。candeactivate;
7。停用;
8。独立的;
9。(子组件分离);
6的执行令。钩子函数激活和数据
钩子函数涉及异步解析规则:
1。如果钩子返回一个承诺,解析时的钩子取决于承诺何时解决。
2。如果钩子不返回承诺并且没有参数,钩子将与解决方案同步。
3,如果钩不回答应,但是有一个参数(过渡),然后钩将等到transition.next(),transition.abort()或()被调用之前解决transition.redirect。
4、在验证类挂钩,如激活,candeactivate和全球每个钩,如果返回值是一个布尔值(Boolean),它将使钩同步解决。
7。根据确保接口已经更新的原因,也就是说,它已经完成了。
已安装执行生命周期附加指令
双向绑定和呈现机制
1。数据监视器和触发器(订阅和发布观察者)
观察者:在SRC目录中
1。array.js
2。dep.js;(一个发布订阅对象实现)
三.(object.defineproperty index.js;使用API,并为这个属性,一个特殊的吸气/ setter设计然后触发setter函数实现监控的效果)。
这是这个部分的源代码。
object.defineproperty(obj,关键,{)
枚举:真,
可配置:真实,
得到:功能reactivegetter(){
VaR值=吸气getter.call(obj):Val
如果(dep.target){
Dep.depend()
如果(childob){
ChildOb.dep.depend()
}
如果(ISArray(值)){
为(VaR e,i = 0,L = value.length;i < L;i++){
e =值{ }
E e.__ob__ e.__ob__ dep.depend()。
}
}
}
返回值
},
设置:功能reactivesetter(newval){
VaR值=吸气getter.call(obj):Val
如果(newval =值){
返回
}
如果(设置){
setter.call(obj,newval)
{人}
newval val =
}
childob =观察(newval)
Dep.notify()
}
})
简化上述侦听器和触发代码如下:
功能notidy(obj,关键){
console.log(键+了);
console.log(键+现在是:+ obj {重点});
}
功能数据(关键,Val){
变量=这个;
object.defineproperty(OB,关键,{)
枚举:真,
可配置:真实,
获取:函数(){
瓦迩回来了;
},
设置:功能(newval){
如果(newval = = val){
返回;
}
newval val =;
Notidy(这个关键);
}
})
}
在src目录directive.js
一系列的解析性质可以看出,指令和指令的实例可以在工具/ lifecycle.js看到。
下面的代码是指令,_bind原型。
无功者=这。_watcher =新观察家(
This.vm,
this.expression,
这_update / /回调。
{
过滤器:this.filters,
TwoWay:this.twoway,
深:this.deep,
预处理:预处理,
后处理:后处理,
适用范围:本。_scope
}
)
与初始值需要内联/ V模型同步回
模型,而不是在init上更新。他们会
设置afterbind钩 / /显示。
如果(这。afterbind){
This.afterBind()
否则如果(此更新){ }
this.update(守望者。值)
}
directive.prototype.set =函数(值){
伊斯坦布尔忽略其他
如果(这。双向){
这个_withlock(函数(){()
这_watcher.set(价值)。
})
否则如果}(process.env.node_env!=生产){
(警告
directive.set()仅能在双向的应用+
指令。
)
}
}
watch.js:在src目录
从下面的代码,你可以发现,观察对象是通过adddep订阅方法
watcher.prototype.adddep =功能(DEP){
var id = dep.id
如果(!This.newDepIds.has(ID)){
This.newDepIds.add(ID)
This.newDeps.push(DEP)
如果(!This.depIds.has(ID)){
Dep.addSub(本)
}
}
}
2。在前面的那么多关于双向绑定,事实上,这也是Vue渲染机制,总结如下
1。通过观察者监视数据,并提供订阅数据项中的更改的能力
2、解析模板到文档片段,然后解析指令,把每一个指令相关的数据项和它的更新方法。例如,在v-text =消息是解析的,只能是一个提示,实际的程序逻辑更加严谨和复杂的数据项,data.message美元和相应的视图更新方法取决于node.textcontent =这data.message美元。
三.通过观察者将上述两个部分结合在一起,即在观察者的相应数据上进行一个订阅的指示数据,这样当数据发生变化时,它将触发观察者,触发相应的视点相关更新方法,最终达到原始模板相关效应。
如何提高3.vue同数据绘制误差v-for
阵列绘制
默认的ID没有通过渲染内部缓存数组值的轨道利用数组的值,意味着如果数组有相同的值,由ID得到一个相同的片段的片段,最后通过DOM操作是在同一个实例,所以它不会影响。
孩子
$child2
_element1 = document.getelementbyid('child1);
_element2 = document.getelementbyid('child2);
document.getelementbyid(测试),InsertBefore(_element1,_element2);
呈现的结果是,在孩子面前$child2
通过使用跟踪的目的是定制的内部ID,这样几项数组中相同的值将不会选择相同的实例,这是由index'or =美元等独特的ID值不同的轨道。
使用索引使反向数据不进行移动操作,当订单不同时,将使用相应的ID进行相应的移动操作。
对象绘制
对象通常使用键作为内部缓存对象的ID,通过跟踪也可以用来定制此ID以提高性能。
vm.model = { {
一:{编号:1,瓦尔:、},
B:{编号:2,瓦尔:2},
C:{编号:3,瓦尔:2},
}
列表更新
vm.model = { {
D:{编号:1,瓦尔:、},
E:{编号:2,瓦尔:2},
F:{编号:3,瓦尔:2})
}
以上是萧边给你介绍Vue从源代码的使用实现的详细教程,希望对你有帮助,如果您有任何问题,请给我留言,萧边会及时回复您。谢谢您支持网站。