基礎(chǔ)
混入 (mixin) 提供了一種非常靈活的方式肛宋,來分發(fā)vue組件中的可復(fù)用功能州藕。一個混入對象可以包含任務(wù)組件選項。當(dāng)組件使用混入對象時酝陈,所欲混入對象的選項將被“混合”進(jìn)入該組件本身的選項床玻。
// 定義一個混入對象
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!"
選項合并
當(dāng)組件和混入對象含有同名選項時,這些選項將以恰當(dāng)?shù)姆绞竭M(jìn)行合并沉帮。沖突時以組件的數(shù)據(jù)為優(yōu)先
var mixin = {
data: function () {
return {
message: 'hello',
foo: 'abc'
}
}
}
new Vue({
mixins: [mixin],
data: function () {
return {
message: 'goodbye',
bar: 'def'
}
},
created: function () {
console.log(this.$data)
// => { message: "goodbye", foo: "abc", bar: "def" }
}
})
同名鉤子函數(shù)將合并為一個數(shù)組锈死,因此都將會被調(diào)用贫堰,混入對象的鉤子函數(shù)將在組件自身鉤子之前調(diào)用。
var mixin = {
created: function () {
console.log('混入對象的鉤子被調(diào)用')
}
}
new Vue({
mixins: [mixin],
created: function () {
console.log('組件鉤子被調(diào)用')
}
})
// => "混入對象的鉤子被調(diào)用"
// => "組件鉤子被調(diào)用"
值為對象的選項待牵,例如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"
全局混入
混入也可以進(jìn)行全局注冊,但是它將影響每一個之后創(chuàng)建的vue實例贰拿。