Vue extend的基本用法(實例詳解)
Vue.extend 屬于 Vue 的全局 API,在實際業(yè)務(wù)開發(fā)中我們很少使用,因為相比常用的 Vue.component 寫法使用 extend 步驟要更加繁瑣一些。
我們創(chuàng)建Vue實例時,都會有一個el選項,來指定實例的根節(jié)點,如果不寫el選項,那組件就處于未掛載狀態(tài)。Vue.extend 的作用,就是基于 Vue 構(gòu)造器,創(chuàng)建一個‘ 子類 ',它的參數(shù)跟new Vue的基本一樣,但data要跟組件一樣,是個函數(shù),再配合$mount,就可以渲染組件,并且掛載到任意指定的節(jié)點上,比如body(這是單文件組件做不到的)
下面我們就來看兩個例子:
1.在單文件組件中使用
<template>
<div id="about"></div>
</template>
<script>
import Vue from 'vue/dist/vue.js'
var Profile = Vue.extend({
template: '<p>{{firstName}} {{lastName}} aka {{alias}}</p>',
data: function () {
return {
firstName: 'Walter',
lastName: 'White',
alias: 'Heisenberg'
}
}
})
// 創(chuàng)建 Profile 實例,并掛載到一個元素上。
let profile=new Profile().$mount();
export default {
mounted(){
let divid=document.getElementById('about');
divid.appendChild(profile.$el)
}
}
</script>
這里需要注意幾個點:
報錯信息

如果有小伙伴遇到了這個問題,那么你導(dǎo)入的是
import Vue from 'vue'
這個時候只需要修改成即可解決問題
import Vue from 'vue/dist/vue.js'
在單文件組件中的掛載問題:
因為這里是通過獲取節(jié)點的方式添加到某個元素內(nèi),所以一定要在鉤子函數(shù)中掛載,確保當(dāng)前頁面的dom節(jié)點加載完成。
mounted(){
let divid=document.getElementById('about');
divid.appendChild(profile.$el)
}
2.單獨構(gòu)建js文件
//index.js
import Vue from 'vue/dist/vue.js'
export default function Create(node){
var notiful=Vue.extend({
template:`<p>{{name}}</p>`,
data(){
return {
name:"liuhuas"
}
}
})
var noti=new notiful().$mount();
document.getElementById(node).appendChild(noti.$el);
}
創(chuàng)建完成后我們就可以在任何地方引入這個js文件 ,并執(zhí)行Create方法,注意的是這里的Create方法里面也獲取了dom,那么就需要在相應(yīng)的鉤子函數(shù)中去執(zhí)行這個方法。
總結(jié)
以上所述是小編給大家介紹的Vue extend的基本用法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!
相關(guān)文章
Vue3源碼分析組件掛載創(chuàng)建虛擬節(jié)點
這篇文章主要為大家介紹了Vue3源碼分析組件掛載創(chuàng)建虛擬節(jié)點,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-10-10
通過GASP讓vue實現(xiàn)動態(tài)效果實例代碼詳解
GASP是一個JavaScript動畫庫,它支持快速開發(fā)高性能的 Web 動畫。GASP 使我們能夠輕松輕松快速的將動畫串在一起,來創(chuàng)造一個高內(nèi)聚的流暢動畫序列。這篇文章主要介紹了通過GASP讓vue實現(xiàn)動態(tài)效果,需要的朋友可以參考下2019-11-11

