vue.extend,mixins和vue.component的區別


1. Vue.extend

Vue.extend就是傳入一下組件options,然后返回了一個Vue的子類,也可以看做是一個組件構造函數。

真的是一個Vue的子類,源碼中,使用原型集成和Copy屬性和方法形式,將其繼承自Vue。

const Sub = function VueComponent (options) {
    this._init(options)
}
Sub.prototype = Object.create(Super.prototype)
Sub.prototype.constructor = Sub
Sub.cid = cid++
Sub.options = mergeOptions(
    Super.options,
    extendOptions
)
Sub['super'] = Super

2. Vue.component

Vue.component是一個插件注冊方法,就是把Vue.extend函數new出來的組件實例,注冊到Vue的Options上。本質是也就是在全局Vue實例的Options,

添加了一個key/value,value就是組件實例。由於組件的Options會繼承Vue的Options,所以在任何組件中,都能調用該組件。

Vue.component('global-component', Vue.extend(baseOptions));

這是原始的調用方式,用Vue.extend注冊一個組件。Vue內部對其進行了簡化,可以省略調用Vue.extend,只傳入Options就行了

//傳入一個選項對象(自動調用 Vue.extend),等價於上行代碼.
Vue.component('global-component', baseOptions);

3. Vue.mixins

mixins可以全局添加一些方法或屬性,方便所有組件調用。可以用來添加通用的對象引用和方法

Vue.mixin({
    data:{
        //組件中可以使用this.$axios來調用axios的方法,十分方便
        $axios: axios
    },
    methods: {
        //每個組件從全局store中取出用戶信息
        getUser() {
            return store.getters.user;
        }
    }
})

總結:

1. mixins是對Vue的Options進行添加,由於組件會繼承Vue的options,相當於給所有實例添加了Options。用於添加公共行為。

2. extend產生一個Vue子類,只會影響這個子類的實例對象,不會對Vue類本身即其他Vue組件實例產生影響。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM