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