vue源码
运行顺序
initMixin 挂载 vue.prototype._init 原型方法
再该方法内初始化了vue的相关方法如:
vm._self = vm
/*初始化生命周期*/
initLifecycle(vm)
/*初始化事件*/
initEvents(vm)
/*初始化render*/
initRender(vm)
/*调用beforeCreate钩子函数并且触发beforeCreate钩子事件*/
callHook(vm, 'beforeCreate')
initInjections(vm) // resolve injections before data/props
/*初始化props、methods、data、computed与watch*/
initState(vm)
initProvide(vm) // resolve provide after data/props
/*调用created钩子函数并且触发created钩子事件*/
callHook(vm, 'created')
vm 即当前this作用域指针
Props
normalizeProps
数组的方式传props 仅支持string props: [‘a’, ‘b’]
常用的props是对象的形式 如
```
Props: {
a: String,
b: {
type: Number
}
}
```
Directives
在创建实例的时候,创建指令,源码编译时会将其序列化
全局写法 Vue.directive(‘click’, {…})
组件内写法 directives: { click, {…} }
这里针对的是组件内写法
内部是将每个data设置了get和set,get时会执行所有设置的getter,set时会先执行get获取旧值比较,然后赋值并重新对新值observe,之后进行dep.notify => watcher.update => 回调丢入队列任务,回调执行时调用对应观察者的run方法以执行其get方法 => 首先会执行当前的观察者watcher的get并设置为Dep.tartget即订阅器目标,接下来执行的data的get时会收集当前发生变化的所有的依赖关系(及子项)之后移除Dep.tartget,后通知当前所有收集到的依赖关系订阅的观察者更新,及子组件更新
来源:oschina
链接:https://my.oschina.net/mdu/blog/3215665