概念

mixin(混入),提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能。

Mixin 对象可以使用任何组件选项如 datamountedcreated 这些等,当组件使用 Mixin 时,Mixin 对象中的所有信息都将混合到组件中。

有两种混入方式:局部混入全局混入

下面就由我来介绍这两种混入方式的使用。


局部混入

  1. 定义 mixin.js 文件。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    export default {
    data() {
    return {
    ...
    }
    },
    methods: {
    ...
    }
    }
  2. 在需要使用的组件中引入。

    1
    2
    3
    4
    import myMixin from "./mixin.js";
    export default {
    mixins: [myMixin]
    }

全局混入

main.js 全局文件中定义。

1
2
3
4
5
Vue.mixin({
created: function () {
...
}
})

选项合并

当组件和混入对象含有同名选项时,这些选项将以恰当的方式进行 合并

有如下几种情况:

  1. 数据对象在内部会进行递归合并,并在发生冲突时以组件数据优先;
  2. 同名钩子函数将合并为一个数组,都将被调用。混入对象的钩子将在组件自身钩子之前调用;
  3. 值为对象的选项,例如 methodscomponentsdirectives,将被合并为同一个对象。两个对象键名冲突时,取组件对象的键值对。

应用场景

在我们遇到在不同的组件中经常会需要用到一些相同或者相似的代码,并且这些代码的功能相对独立。这时候我们就可以使用 mixin 功能将相同或者相似的代码提取出来。

但是呢,它也存在一些问题:

  1. 项目复杂后不利于阅读;
  2. 多个 mixin 可能会造成命名冲突;
  3. 隐含的依赖关系。

因此,在使用 mixin 时,需要合理的应用,以避免不必要的错误。