摘要:定義混入是一種分發(fā)組件中可復(fù)用功能非常靈活的方式?;烊雽?duì)象的鉤子被調(diào)用組件鉤子被調(diào)用值為對(duì)象的選項(xiàng),例如,和,將被混合為同一個(gè)對(duì)象。全局混入也可以全局注冊(cè)混入對(duì)象。注意使用一旦使用全局混入對(duì)象,將會(huì)影響到所有之后創(chuàng)建的實(shí)例。
定義
混入是一種分發(fā)Vue組件中可復(fù)用功能非常靈活的方式。混入對(duì)象可以包含任意組件選項(xiàng)。當(dāng)組件使用混入對(duì)象時(shí),所有混入對(duì)象的選項(xiàng)將被混入該組件本身的選項(xiàng)。
例子:
//定義一個(gè)混入對(duì)象 var myMixin={ created:function(){ this.hello(); }, methods:{ hello:function(){ console.log("hello from mixin"); } } } //定義一個(gè)使用混入對(duì)象的組件 var Component = Vue.extend({ mixins:[myMixin] }) var component = new Component();=>hello from mixin選項(xiàng)合并
當(dāng)組件和混入對(duì)象含有同名選項(xiàng)時(shí),這些選項(xiàng)將以恰當(dāng)?shù)姆绞交旌稀?br>比如,數(shù)據(jù)對(duì)象在內(nèi)部會(huì)進(jìn)行遞歸合并,在和組件的數(shù)據(jù)發(fā)生沖突時(shí)以組件數(shù)據(jù)優(yōu)先。
var mixin ={ data:function(){ return{ messageL:"hello", foo:"abc" } }, created(){ console.log("混入對(duì)象的鉤子被調(diào)用") } } new Vue({ mixins:[mixin], data:function(){ return{ message:"goodbye", bar:"def } }, created:function(){ console.log("組件鉤子被調(diào)用") console.log(this.$data); // => { message: "goodbye", foo: "abc", bar: "def" } } })
值為對(duì)象的選項(xiàng),例如methods,components和directives,將被混合為同一個(gè)對(duì)象。兩個(gè)對(duì)象鍵名沖突時(shí),取組件對(duì)象的鍵值對(duì)。
var mixin={ methods:{ foo:function(){ console.log("foo") }, conflicting:function(){ console.log("from mixin") } } } var vm = new Vue({ mixins:[mixin], methods:{ bar:function(){ console.log("bar") }, conflicting:function(){ console.log("from self") } } }) vm.foo()//foo vm.bar()//bar vm.conflicting()//form self全局混入
也可以全局注冊(cè)混入對(duì)象。注意使用!一旦使用全局混入對(duì)象,將會(huì)影響到所有之后創(chuàng)建的Vue實(shí)例。使用恰當(dāng)時(shí),可以為自定義對(duì)象注入處理邏輯。
//為自定義的選項(xiàng)myOption注入一個(gè)處理器。 Vue.mixin({ creted:function(){ var myOption = this.$options.myOption; if(myOption){ console.log(myOption) } } }) new Vue({ myOption:"hello" })
謹(jǐn)慎使用全局混入對(duì)象,因?yàn)闀?huì)影響到每個(gè)多帶帶創(chuàng)建Vue實(shí)例(包括第三方模板)。大多數(shù)情況下,只應(yīng)當(dāng)應(yīng)用于自定義選項(xiàng),就像上面示例一樣。也可以將其用作Plugins以避免產(chǎn)生重復(fù)作用。
自定義選項(xiàng)合并策略自定義選項(xiàng)將使用默認(rèn)策略,即簡(jiǎn)單的覆蓋已有值。如果想讓自定義選項(xiàng)以自定義邏輯合并,可以向Vue.config.optionMergeStrategies添加一個(gè)函數(shù):
Vue.config.optionMergeStrategies.myOption=function(toVal,fromVal){ return mergedVal }
對(duì)于大多數(shù)對(duì)象選項(xiàng),可以使用methods的合并策略:
var strategies = Vue.config.optionMergeStrategies; strategies.myOption = strategies.methods
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/102945.html
摘要:說(shuō)一種沒(méi)人發(fā)的,利用混入來(lái)實(shí)現(xiàn)全局變量和函數(shù)。這種方法優(yōu)點(diǎn)是會(huì)有方法變量篩選器提示。一文件進(jìn)行全局混入一文件,我是把方法變量篩選器這三個(gè)分別寫到三個(gè)文件里面了,方便后期維護(hù)。 說(shuō)一種沒(méi)人發(fā)的,利用混入mixins來(lái)實(shí)現(xiàn)全局變量和函數(shù)。mixins里面的方法、變量、篩選器會(huì)和組件里面的方法、變量、篩選器合并。這種方法優(yōu)點(diǎn)是ide會(huì)有方法、變量、篩選器提示。 一、main.js文件 imp...
摘要:全局混入對(duì)象不會(huì)覆蓋組件中的同名鉤子函數(shù)將混合為一個(gè)數(shù)組,因此都將被調(diào)用。而鉤子函數(shù)混入和組件中的不合并,而是都執(zhí)行,先執(zhí)行混入中的鉤子,再執(zhí)行組件中的。 組件引用 —— ref、$refs 給子組件或者原始DOM加上ref特性,就可以為其聲明引用標(biāo)記,添加引用后,可以在Javascript中使用vm|this.$refs.refname獲取子組件或原始DOM。若是原始DOM,則效果如...
摘要:全局混入對(duì)象不會(huì)覆蓋組件中的同名鉤子函數(shù)將混合為一個(gè)數(shù)組,因此都將被調(diào)用。而鉤子函數(shù)混入和組件中的不合并,而是都執(zhí)行,先執(zhí)行混入中的鉤子,再執(zhí)行組件中的。 組件引用 —— ref、$refs 給子組件或者原始DOM加上ref特性,就可以為其聲明引用標(biāo)記,添加引用后,可以在Javascript中使用vm|this.$refs.refname獲取子組件或原始DOM。若是原始DOM,則效果如...
摘要:概念模式就是一些提供能夠被一個(gè)或者一組子類簡(jiǎn)單繼承功能的類意在重用其功能。示例下面通過(guò)一個(gè)簡(jiǎn)單的例子來(lái)演示這個(gè)模式混入模式的實(shí)現(xiàn)不指定特定方法名的時(shí)候,將后者所有的方法都添加到前者里優(yōu)缺點(diǎn)優(yōu)點(diǎn)有助于減少系統(tǒng)中的重復(fù)功能及增加函數(shù)復(fù)用。 概念 Mixin模式就是一些提供能夠被一個(gè)或者一組子類簡(jiǎn)單繼承功能的類,意在重用其功能。在面向?qū)ο蟮恼Z(yǔ)言中,我們會(huì)通過(guò)接口繼承的方式來(lái)實(shí)現(xiàn)功能的復(fù)用。但...
摘要:使用替換目標(biāo)在第三篇文章中,我們使用來(lái)抽離了注入依賴項(xiàng)的公共邏輯。成果通過(guò)作用域插槽,我們有效地避免了第三方組件由于混入而可能造成的命名沖突以及隱式依賴等問(wèn)題。 04 使用 slot 替換 mixin 目標(biāo) 在第三篇文章中,我們使用 mixin 來(lái)抽離了注入 toggle 依賴項(xiàng)的公共邏輯。在 react 中,類似的需求是通過(guò) HOC 的方式來(lái)解決的,但是仔細(xì)想想的話,react 在早...
閱讀 1334·2021-11-04 16:09
閱讀 3542·2021-10-19 11:45
閱讀 2432·2021-10-11 10:59
閱讀 1036·2021-09-23 11:21
閱讀 2797·2021-09-22 10:54
閱讀 1171·2019-08-30 15:53
閱讀 2642·2019-08-30 15:53
閱讀 3506·2019-08-30 12:57