官方解释:混入 (mixins) 是一种分发 Vue 组件中可复用功能的非常灵活的方式。混入对象可以包含任意组件选项。当组件使用混入对象时,所有混入对象的选项将被混入该组件本身的选项。
大白话,mixins可以理解成常见函数封装,比如一个方法你想到处使用,是不是可以提个文件出来封装个函数,对的,mixins就是干这么个事
// 定义一个混入对象
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!"
看到没,这玩意儿自身还能有生命周期,并且有个核心东西methods
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" }
}
})
这段代码说的意思就是如果你在mixin中定义了data,将mixin方法混合到一个组件中区使用,这时候在组件中你又重新定义了这个data,那么最终你使用的时候拿到的这个data是你当前页面拿到的data值,但你可能想象这是就近原则?那么错了,假设在mixins中同样去打印this.message,你会发现打印结果依然是goodbye,而并不是hello。
mixins里面的定义data及其事件啥的权限相对低于外面vue实例。
同名钩子函数将混合为一个数组,因此都将被调用。另外,混入对象的钩子将在组件自身钩子之前调用。
var mixin = {
created: function () {
console.log('混入对象的钩子被调用')
}
}
new Vue({
mixins: [mixin],
created: function () {
console.log('组件钩子被调用')
}
})
// => "混入对象的钩子被调用"
// => "组件钩子被调用"
这段代码想说的无非就是mixin里面的钩子函数也就是生命周期会比你组件中定义的先执行
也可以全局注册混入对象。注意使用! 一旦使用全局混入对象,将会影响到 所有 之后创建的 Vue 实例。使用恰当时,可以为自定义对象注入处理逻辑。
// 为自定义的选项 'myOption' 注入一个处理器。
Vue.mixin({
created: function () {
var myOption = this.$options.myOption
if (myOption) {
console.log(myOption)
}
}
})
new Vue({
myOption: 'hello!'
})
// => "hello!"
这玩意儿就是说如果你直接挂Vue的实例上,那这东西在整个项目都可以去直接耍,并且还能取影响你使用的第三框框架,前面我们都是定义个mixin,在需要的组件中区混入
本文地址:https://www.zhuimengzhu.com/details/278.html
转载地址:暂无
转载说明:转载时请在文首注明来源zhuimengzhu.com 及教程作者,并附本文链接。谢谢各位编辑同仁配合。zhuimengzhu 保留追究相应责任的权利。