Vue2vue

Vue.extend与Vue.component的区别

2020-08-12  本文已影响0人  darkTi

一、Vue.extend是啥

1、官方解释:使用基础 Vue 构造器,创建一个“子类”。参数是一个包含组件选项的对象。例子如下(先Vue.extend$mount):

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

2、但是还是不懂怎么办,这样来讲~

var myvue = Vue.extend(这里可以是一个.vue单文件组件,也可以是一个包含组件选项的对象) 
var vm = new myvue({
    //其他选项
})

二、Vue.component()

1、注册或获取全局组件。注册还会自动使用给定的 id 设置组件的名称;

// 注册组件,传入一个扩展过的构造器
Vue.component('my-component', Vue.extend({ /* ... */ }))

// 注册组件,传入一个选项对象 (自动调用 Vue.extend)
Vue.component('my-component', { /* ... */ })

// 获取注册的组件 (始终返回构造器)
var MyComponent = Vue.component('my-component')

这样一看,就比较清晰了,extend和component作用基本相同,区别在于我们需不需要使用组件名称,不需要使用组件名称时,用extend会简便些;需要使用新的标签来定义组件时,那么就用component去创建组件;

三、Vue的插件功能,插件通常用来为 Vue 添加全局功能

1、开发插件的方法(有四个方法),首先应该暴露一个install方法,这个方法的第一个参数是Vue构造器,第二个参数是一个可选的选项对象:

//它是个JS文件
    export default {
        install(Vue,options){
            // 1. 添加全局方法或 property
            Vue.myGlobalMethod = function () {
              // 逻辑...
             }

            // 2. 添加全局资源
            Vue.directive('my-directive', {
                  bind (el, binding, vnode, oldVnode) {
                  // 逻辑...
                   }
                 ......
            })

          // 3. 注入组件选项
           Vue.mixin({
              created: function () {
                // 逻辑...
               }
              ...
           })

           // 4. 添加实例方法
          Vue.prototype.$myMethod = function (methodOptions) {
              // 逻辑...
          }
       }
    }

2、使用插件,通过全局方法 Vue.use() 使用插件。它需要在你调用 new Vue() 启动应用之前完成:

// 调用 `MyPlugin.install(Vue)`
Vue.use(MyPlugin)

new Vue({
  // ...组件选项
})

四、总结

上一篇下一篇

猜你喜欢

热点阅读