Vue Mixin
Mixin
是什么?
Mixin
本质是一个JavaScript对象,它可以包含Vue组件中的data
、components
、methods
、computed
选项等。Mixin
是一个类,其他类可以访问Mixin
类的方法而不必成为它的之类。Mixin
常用于功能模块使用,在需要该功能时混入,提高代码的复用性。
基础
首先创建mixin.js
:
1 | // @/src/utils/mixin.js |
然后在组件中导入并使用:
1 | // @/src/views/mixin.vue |
在组件被创建时,可以看到hello from mixin!
被打印了
选项合并
当组件和mixin
对象含有同名选项时,这些选项将以恰当的方式进行合并。
mixin
可以拥有自己的data
函数,当mixin
里的data
函数里的数据与组件data
的数据发生冲突,会以组件自身的数据为优先。
1 | // @/src/utils/mixin.js |
1 | // @/src/views/mixin.vue |
值为对象的选项,例如 methods
、components
和 directives
,将被合并为同一个对象。两个对象键名冲突时,取组件对象的键值对。
全局Mixin
可以为Vue组件全局应用Mixin
:
1 | import { createApp } from 'vue' |
Mixin
可以全局注册,一旦使用全局Mixin
,它将影响每一个之后创建的组件,包括每一个子组件。
自定义选项合并
自定义选项在合并时,默认策略为简单的覆盖已有值,如果想让某个自定义选项以自定义逻辑进行合并,可以在app.config.optionMergeStrategies
中添加一个参数
1 | const app = Vue.createApp({}) |
上面的代码是optionMergeStrategies
的默认写法,所以Mixin
在合并选项后的值总是被组件的选项值,我们可以把策略更改为优先返回Mixin中的值:
1 | const app = Vue.createApp({}) |