Appearance
组件的初始化流程
本节目标:理解“组件的初始化流程”的核心思路,并能把它用于实际开发或面试表达。
说明:原 OneNote 中有图片引用,但图片未包含在导出目录中;本页保留了可用的文字与代码内容。 全局组件和局部组件
全局组件:使用Vue.component创建的组件,可以在整个应用中使用;比如创建了很多个Vue实例,可以在它们中直接使用全局组件;
局部组件:在new Vue()实例时,在实例中使用components定义的组件,则只能在这个Vue实例中使用;
局部组件优先级高于全局组件,即优先使用局部组件,再选择使用全局组件;这是一个类似于作用域链的查找机制,局部组件并不会覆盖全局组件;
Vue.component() 方法在内部会调用 Vue.extends
Vue.extend( options )参数: {Object} options用法:``使用基础 Vue 构造器,创建一个“子类”。参数是一个包含组件选项的对象。
data选项是特例,需要注意 - 在
Vue.extend()中它必须是函数
<div id="mount-point"></div>
//创建构造器
var Profile = Vue.extend({
template: '<p>{{firstName}} {{lastName}} aka {{alias}}</p>',
data: function () {
return {
firstName: 'Walter',
lastName: 'White',
alias: 'Heisenberg'
}
}
})
//创建
Profile实例,并挂载到一个元素上。
new Profile().$mount('#mount-point')结果如下:
<p>Walter White aka Heisenberg</p>Vue.component( id, [definition] )参数:
{string} id
{Function | Object} [definition]用法:``注册或获取全局组件。注册还会自动使用给定的
id设置组件的名称
//注册组件,传入一个扩展过的构造器
Vue.component('my-component', Vue.extend({ /* ... */ }))
//注册组件,传入一个选项对象
(自动调用
Vue.extend)
Vue.component('my-component', { /* ... */ })
//获取注册的组件
(始终返回构造器
)
var MyComponent = Vue.component('my-component')为什么data必须是函数;
典型的继承 一、Sub.proto=Object.create(sup.prototype) 相当于Sub.prototype.proto=Super.prototype,会影响子类constructor的指向; 其源码:
二、Object.setProtoTypeOf();
每次调用vue.component()时,实际际在内部调用vue.extend();
- Vue.extend方法内部的主要逻辑是创建一个子类,这个子类继承了vue;
- 然后把vue上的options合并到子类上;
- 最后,返回这个子类;
所以我们可以利用vue.extend返回的子类来创建实例,这个实例继承可以调用vue上的所有方法。
