vue构造器

236 阅读1分钟

前言

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')