官方解释:混入 (mixins) 是一种分发 Vue 组件中可复用功能的非常灵活的方式。混入对象可以包含任意组件选项。当组件使用混入对象时,所有混入对象的选项将被混入该组件本身的选项。
大白话,mixins可以理解成常见函数封装,比如一个方法你想到处使用,是不是可以提个文件出来封装个函数,对的,mixins就是干这么个事
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | // 定义一个混入对象 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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实例。
同名钩子函数将混合为一个数组,因此都将被调用。另外,混入对象的钩子将在组件自身钩子之前调用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
这段代码想说的无非就是mixin里面的钩子函数也就是生命周期会比你组件中定义的先执行
也可以全局注册混入对象。注意使用! 一旦使用全局混入对象,将会影响到 所有 之后创建的 Vue 实例。使用恰当时,可以为自定义对象注入处理逻辑。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | // 为自定义的选项 'myOption' 注入一个处理器。 Vue.mixin({ created: function () { var myOption = this.$options.myOption if (myOption) { console.log(myOption) } } }) new Vue({ myOption: 'hello!' }) // => "hello!" |
这玩意儿就是说如果你直接挂Vue的实例上,那这东西在整个项目都可以去直接耍,并且还能取影响你使用的第三框框架,前面我们都是定义个mixin,在需要的组件中区混入
总体来说mixin是个比较实用,而且很简单的东西,只是如果你没仔细去看去理解,觉得有点神秘,或者官方说的有点拗口,用一次就知道了,就是个代码方法重用。要注意的就是,mixins和vue上相同的data属性和相同的函数名,在调用时候,拿到的始终是vue实例上定义的那个,mixins里面的定义data及其事件啥的权限相对低于外面vue实例。
下一篇:【ES6】Class类的基本使用 – 带你快速入门秒懂新世界
支付宝扫一扫打赏
微信扫一扫打赏
共 0 条评论关于"带你轻轻松松理解vue.js中的mixins(混合)"
最新评论