通过 Vue.mixin() 方法来全局注册一个mixin,或在组件中的 mixins 选项中注册一个mixin:
js
// 定义一个mixin
var myMixin = {
created: function () {
this.hello()
},
methods: {
hello: function () {
console.log('hello from mixin!')
}
}
}
// 全局注册
Vue.mixin(myMixin)
// 在组件中注册
new Vue({
mixins: [myMixin]
})
当组件和mixin含有同名选项时,这些选项将以恰当的方式进行“合并”。
具体来说,组件的选项优先级高于mixin,这样可以通过mixin来扩展组件选项。
下面是一个使用mixin的示例:
js
// 定义一个mixin
var myMixin = {
created: function () {
this.sayHello()
},
methods: {
sayHello: function () {
console.log('hello from mixin!')
}
}
}
// 定义一个组件
Vue.component('my-component', {
mixins: [myMixin],
created: function () {
console.log('hello from component!')
}
})
// 创建Vue实例
new Vue({
el: '#app'
})
在这个示例中,myMixin定义了一个方法sayHello(),my-component组件使用了myMixin,并且也定义了一个created方法。在控制台中的输出结果为:
hello from mixin! hello from component!
需要注意的是,mixin中的数据、生命周期钩子等选项将被每个组件实例混合。
如果组件和mixin含有同名的数据选项,那么这些数据会在组件中以就近原则覆盖mixin中的数据。
如果你希望mixin中的数据不会影响到组件中的数据,可以使用深度克隆来解决这个问题。
总结一下,使用mixin可以实现代码的复用和组件的继承,可以在mixin中定义一些常用的方法和数据,在组件中使用mixin来扩展其选项。但需要注意的是,mixin中的数据选项会被每个组件实例混合,因此需要注意命名冲突问题。