前言
vue2中存在extend构造器属性,不过该属性在vue3.x中被移除,取而代之的是用createApp这个全局API来挂载组件。
vue2里面 vue.extend
官网解释:
- 使用基础
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>
用法
extend创建的vue构造器,不是组件实例,所以不能当做组件直接调用,需要通过挂载或者注册使用
1、挂载到某个元素上
// 和上面用法一样,创建实例,并挂载到一个元素上。
new Profile().$mount('#mount-point')
2、注册为局部组件
var Profile = Vue.extend({
template: '<p>我是构造器</p>',
data: function () {
return { ... }
}
})
new Vue({
el:'#example',
data:{},
components:{
component1:Profile
}
})
<div id="example">
<component1></component1>
</div>
3、注册到全局方法
var Profile = Vue.extend({
template: '<p>我是构造器</p>',
data: function () {
return { ... }
}
})
Vue.component('component2',Profile)
<div id="example">
<component2></component2>
</div>
vue3中 createApp()
const Profile = {
template: '<p>{{firstName}} {{lastName}} aka {{alias}}</p>',
data() {
return {
firstName: 'Walter',
lastName: 'White',
alias: 'Heisenberg'
}
}
}
Vue.createApp(Profile).mount('#mount-point')