文章出處
文章列表
前面的話
本文將詳細介紹Vue混合mixins
概述
混合 (mixins) 是一種分發 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 = { created: function () { console.log('混合對象的鉤子被調用') } } new Vue({ mixins: [mixin], created: function () { console.log('組件鉤子被調用') } }) // -> "混合對象的鉤子被調用" // -> "組件鉤子被調用"
值為對象的選項,例如 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() // -> "from self"
[注意] Vue.extend()
也使用同樣的策略進行合并
全局混合
也可以全局注冊混合對象。 一旦使用全局混合對象,將會影響到 所有 之后創建的 Vue 實例。使用恰當時,可以為自定義對象注入處理邏輯
// 為自定義的選項 'myOption' 注入一個處理器。 Vue.mixin({ created: function () { var myOption = this.$options.myOption if (myOption) { console.log(myOption) } } }) new Vue({ myOption: 'hello!' }) // -> "hello!"
[注意]一定要謹慎使用全局混合對象,因為會影響到每個單獨創建的 Vue 實例(包括第三方模板)。大多數情況下,只應當應用于自定義選項,就像上面示例一樣。 也可以將其用作插件以避免產生重復應用
自定義選項混合策略
自定義選項將使用默認策略,即簡單地覆蓋已有值。 如果想讓自定義選項以自定義邏輯混合,可以向Vue.config.optionMergeStrategies
添加一個函數:
Vue.config.optionMergeStrategies.myOption = function (toVal, fromVal) { // return mergedVal }
對于大多數對象選項,可以使用 methods
的合并策略:
var strategies = Vue.config.optionMergeStrategies strategies.myOption = strategies.methods
文章列表
全站熱搜