最新文章專題視頻專題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

關(guān)于vue中extend,mixins,extends,components,install的操作

來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 19:33:50
文檔

關(guān)于vue中extend,mixins,extends,components,install的操作

關(guān)于vue中extend,mixins,extends,components,install的操作:這篇文章主要介紹了關(guān)于vue中extend,mixins,extends,components,install的操作,有著一定的參考價(jià)值,現(xiàn)在分享給大家,有需要的朋友可以參考一下前言你知道extend,mixins,extends,components,install用法嗎 你知道他們的區(qū)別嗎你知道他們
推薦度:
導(dǎo)讀關(guān)于vue中extend,mixins,extends,components,install的操作:這篇文章主要介紹了關(guān)于vue中extend,mixins,extends,components,install的操作,有著一定的參考價(jià)值,現(xiàn)在分享給大家,有需要的朋友可以參考一下前言你知道extend,mixins,extends,components,install用法嗎 你知道他們的區(qū)別嗎你知道他們

1.Vue.extend

1.使用vue構(gòu)造器,創(chuàng)建一個(gè)子類,參數(shù)是包含組件選項(xiàng)的對(duì)象;
2.是全局的

// 創(chuàng)建構(gòu)造器
var Profile = Vue.extend({
 template: '<p>{{extendData}}</br>實(shí)例傳入的數(shù)據(jù)為:{{propsExtend}}</p>',//template對(duì)應(yīng)的標(biāo)簽最外層必須只有一個(gè)標(biāo)簽
 data: function () {
 return {
 extendData: '這是extend擴(kuò)展的數(shù)據(jù)',
 }
 },
 props:['propsExtend']
})
// 創(chuàng)建 Profile 實(shí)例,并掛載到一個(gè)元素上。可以通過(guò)propsData傳參.
new Profile({propsData:{propsExtend:'我是實(shí)例傳入的數(shù)據(jù)'}}).$mount('#app-extend')

結(jié)論:
Vue.extend實(shí)際是創(chuàng)建一個(gè)構(gòu)造器,對(duì)應(yīng)的初始化構(gòu)造器,并將其掛載到標(biāo)簽上

github源碼,請(qǐng)戳這里 ,歡迎star

2.Vue.component

1.將通過(guò) Vue.extend 生成的擴(kuò)展實(shí)例構(gòu)造器注冊(cè)(命名)為一個(gè)全局組件,參數(shù)可以是Vue.extend()擴(kuò)展的實(shí)例,也可以是一個(gè)對(duì)象(會(huì)自動(dòng)調(diào)用extend方法)
2.兩個(gè)參數(shù),一個(gè)組件名,一個(gè)extend構(gòu)造器或者對(duì)象

//1.創(chuàng)建組件構(gòu)造器
 var obj = {
 props: [],
 template: '<p><p>{{extendData}}</p></p>',//最外層只能有一個(gè)大盒子,這個(gè)和<tempalte>對(duì)應(yīng)規(guī)則一致
 data: function () {
 return {
 extendData: '這是Vue.component傳入Vue.extend注冊(cè)的組件',
 }
 },
 };

 var Profile = Vue.extend(obj);

 //2.注冊(cè)組件方法一:傳入Vue.extend擴(kuò)展過(guò)得構(gòu)造器
 Vue.component('component-one', Profile)

 //2.注冊(cè)組件方法二:直接傳入
 Vue.component('component-two', obj)

 //3.掛載
 new Vue({
 el: '#app'
 });

 //獲取注冊(cè)的組件 (始終返回構(gòu)造器)
 var oneComponent=Vue.component('component-one');
 console.log(oneComponent===Profile)//true,返回的Profile構(gòu)造器

3.mixins

值可以是一個(gè)混合對(duì)象數(shù)組,混合實(shí)例可以包含選項(xiàng),將在extend將相同的選項(xiàng)合并
mixins代碼:

 var mixin={
 data:{mixinData:'我是mixin的data'},
 created:function(){
 console.log('這是mixin的created');
 },
 methods:{
 getSum:function(){
 console.log('這是mixin的getSum里面的方法');
 }
 }
 }

 var mixinTwo={
 data:{mixinData:'我是mixinTwo的data'},
 created:function(){
 console.log('這是mixinTwo的created');
 },
 methods:{
 getSum:function(){
 console.log('這是mixinTwo的getSum里面的方法');
 }
 }
 } 

 var vm=new Vue({
 el:'#app',
 data:{mixinData:'我是vue實(shí)例的data'},
 created:function(){
 console.log('這是vue實(shí)例的created');
 },
 methods:{
 getSum:function(){
 console.log('這是vue實(shí)例里面getSum的方法');
 }
 },
 mixins:[mixin,mixinTwo]
 })
 
 //打印
結(jié)果為: 這是mixin的created 這是mixinTwo的created 這是vue實(shí)例的created 這是vue實(shí)例里面getSum的方法

結(jié)論:
1.mixins執(zhí)行的順序?yàn)閙ixins>mixinTwo>created(vue實(shí)例的生命周期鉤子);
2.選項(xiàng)中數(shù)據(jù)屬性如data,methods,后面執(zhí)行的回覆蓋前面的,而生命周期鉤子都會(huì)執(zhí)行

3.extends

extends用法和mixins很相似,只不過(guò)接收的參數(shù)是簡(jiǎn)單的選項(xiàng)對(duì)象或構(gòu)造函數(shù),所以extends只能單次擴(kuò)展一個(gè)組件

var extend={
 data:{extendData:'我是extend的data'},
 created:function(){
 console.log('這是extend的created');
 },
 methods:{
 getSum:function(){
 console.log('這是extend的getSum里面的方法');
 }
 }
 }

 var mixin={
 data:{mixinData:'我是mixin的data'},
 created:function(){
 console.log('這是mixin的created');
 },
 methods:{
 getSum:function(){
 console.log('這是mixin的getSum里面的方法');
 }
 }
 }
 
 
 var vm=new Vue({
 el:'#app',
 data:{mixinData:'我是vue實(shí)例的data'},
 created:function(){
 console.log('這是vue實(shí)例的created');
 },
 methods:{
 getSum:function(){
 console.log('這是vue實(shí)例里面getSum的方法');
 }
 },
 mixins:[mixin],
 extends:extend
 })
 
 //打印結(jié)果
 這是extend的created
 這是mixin的created
 這是vue實(shí)例的created
 這是vue實(shí)例的getSum里面的方法

結(jié)論:
1.extends執(zhí)行順序?yàn)?extends>mixins>mixinTwo>created
2.定義的屬性覆蓋規(guī)則和mixins一致

4.components

注冊(cè)一個(gè)局部組件

//1.創(chuàng)建組件構(gòu)造器
 var obj = {
 props: [],
 template: '<p><p>{{extendData}}</p></p>',//最外層只能有一個(gè)大盒子,這個(gè)和<tempalte>對(duì)應(yīng)規(guī)則一致
 data: function () {
 return {
 extendData: '這是component局部注冊(cè)的組件',
 }
 },
 };

 var Profile = Vue.extend(obj);
 
 //3.掛載
 new Vue({
 el: '#app',
 components:{
 'component-one':Profile,
 'component-two':obj
 }
 });

5.install

1.是開(kāi)發(fā)vue的插件,這個(gè)方法的第一個(gè)參數(shù)是 Vue 構(gòu)造器,第二個(gè)參數(shù)是一個(gè)可選的選項(xiàng)對(duì)象(可選)
2.vue.use方法可以調(diào)用install方法,會(huì)自動(dòng)阻止多次注冊(cè)相同插件

 var MyPlugin = {};
 MyPlugin.install = function (Vue, options) {
 // 2. 添加全局資源,第二個(gè)參數(shù)傳一個(gè)值默認(rèn)是update對(duì)應(yīng)的值
 Vue.directive('click', {
 bind(el, binding, vnode, oldVnode) {
 //做綁定的準(zhǔn)備工作,添加時(shí)間監(jiān)聽(tīng)
 console.log('指令my-directive的bind執(zhí)行啦');
 },
 inserted: function(el){
 //獲取綁定的元素
 console.log('指令my-directive的inserted執(zhí)行啦');
 },
 update: function(){
 //根據(jù)獲得的新值執(zhí)行對(duì)應(yīng)的更新
 //對(duì)于初始值也會(huì)調(diào)用一次
 console.log('指令my-directive的update執(zhí)行啦');
 },
 componentUpdated: function(){
 console.log('指令my-directive的componentUpdated執(zhí)行啦');
 },
 unbind: function(){
 //做清理操作
 //比如移除bind時(shí)綁定的事件監(jiān)聽(tīng)器
 console.log('指令my-directive的unbind執(zhí)行啦');
 }
 })

 // 3. 注入組件
 Vue.mixin({
 created: function () {
 console.log('注入組件的created被調(diào)用啦');
 console.log('options的值為',options)
 }
 })

 // 4. 添加實(shí)例方法
 Vue.prototype.$myMethod = function (methodOptions) {
 console.log('實(shí)例方法myMethod被調(diào)用啦');
 }
 }

 //調(diào)用MyPlugin
 Vue.use(MyPlugin,{someOption: true })

 //3.掛載
 new Vue({
 el: '#app'
 });

6.各個(gè)方法之間的關(guān)系

Vue.extend和Vue.component是為了創(chuàng)建構(gòu)造器和組件;
mixins和extends是為了拓展組件;
install是開(kāi)發(fā)插件; 總的順序關(guān)系: Vue.extend>Vue.component>extends>mixins

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

關(guān)于vue中extend,mixins,extends,components,install的操作

關(guān)于vue中extend,mixins,extends,components,install的操作:這篇文章主要介紹了關(guān)于vue中extend,mixins,extends,components,install的操作,有著一定的參考價(jià)值,現(xiàn)在分享給大家,有需要的朋友可以參考一下前言你知道extend,mixins,extends,components,install用法嗎 你知道他們的區(qū)別嗎你知道他們
推薦度:
標(biāo)簽: 操作 VUE mi
  • 熱門(mén)焦點(diǎn)

最新推薦

猜你喜歡

熱門(mén)推薦

專題
Top