全局注册
- ASSET_TYPES
- component
- directive
- filter
Vue.component(id,{})
-
实现
// 遍历ASSET_TYPES,给Vue拓展一个方法Vue[type] ASSET_TYPES.forEach(type => { Vue[type] = function( id: string, definition: Funcion|Object ) { // type === 'component' 并且definition是一个普通 对象,通过vue.extend将定义的对象转化成构造器 if (type === 'component' && isPlainObject(definition){ definition = this.options._base.extend(definiton) } // 最后给vue.components全局扩展了这样一个定义 } })
// createElement的创建逻辑 // 先判断这个tag是不是一个保留便签,是,则创建一个普通的html便签 // 然后通过resolveAsset方法来查找id,id => 驼峰id => 手字符大写id => 原型上的id,如果找不到,则创建一个不认识的vnode
局部注册
export default{
name: 'App',
components:{
HelloWorld
}
}
- 实现
- 子组件在
sub.option
中合并components
选项,在resolveAsset
中拿到定义的组件 -
vm.$options.components
可以访问到子组件
- 子组件在
网友评论