Vue.extend()用法

應(yīng)用場(chǎng)景:

在 vue 項(xiàng)目中,初始化的根實(shí)例后,所有頁(yè)面基本上都是通過(guò) router 來(lái)管理,組件也是通過(guò) import 來(lái)進(jìn)行局部注冊(cè),所以組件的創(chuàng)建不需要去關(guān)注,相比 extend 要更省心一點(diǎn)點(diǎn)。但是這樣做會(huì)有幾個(gè)缺點(diǎn):

  • 組件模板都是事先定義好的,如果我要從接口動(dòng)態(tài)渲染組件怎么辦?
  • 如果沒(méi)有插槽,需要在某個(gè)節(jié)點(diǎn)掛載東西
  • 所有內(nèi)容都是在 #app 下渲染,注冊(cè)組件都是在當(dāng)前位置渲染。如果我要實(shí)現(xiàn)一個(gè)類似于 window.alert() 提示組件要求像調(diào)用 JS 函數(shù)一樣調(diào)用它,該怎么辦?
    這時(shí)候,Vue.extend + vm.$mount 組合就派上用場(chǎng)了。

基礎(chǔ)用法:

Vue.extend( options )
參數(shù):{Object} options
用法:使用基礎(chǔ) Vue 構(gòu)造器,創(chuàng)建一個(gè)“子類”。參數(shù)是一 個(gè)包含組件選項(xiàng)的對(duì)象;
data 選項(xiàng)是特例,需要注意: 在 Vue.extend() 中它必須是函數(shù);

<div id="point"></div>

import Vue from 'vue'

//創(chuàng)建構(gòu)造器
var Profile = Vue.extend({
    template: '<p>{{firstName}} {{lastName}}</p>',
      data: function () {
        return {
          firstName: "司命",
          lastName: "玄水",
        };
      },
})

//一般在這里可以使用
mounted() {
    
    let ele = this.$el.querySelector("#point")
    //掛載到元素上
    new Profile().$mount(ele)
}

第二種寫法

// 1. 定義一個(gè)vue模版 
let  tem ={
    template:`<p>{{firstName}} {{lastName}} aka {{alias}}</p>`,
    data:function(){    
    return{    
        firstName:'Walter',   
        lastName:'White',    
        alias:'Heisenberg'
    }
}

// 2. 調(diào)用
const TemConstructor = Vue.extend(tem) 
let ele = this.$el.querySelector("#point")
new TemConstructor({el: ele}) // 生成一個(gè)實(shí)例,并掛載

注意事項(xiàng)

  • new Profile().$mount(ele)等同于new TemConstructor({el: ele})

  • 如果有警告,在vue.config.js導(dǎo)入下面這個(gè)

    module.exports = {
        runtimeCompiler: true,
    }
    
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容