directives的作用是减少DOM操作的重复
mixins的作用是减少data、methods、钩子的重复

创建mixin文件

将重复的data、methods、钩子放到一个js文件内

  1. const log = {
  2. data() {
  3. return {
  4. name: undefined,
  5. time: undefined
  6. };
  7. },
  8. created() {
  9. if (!this.name) {
  10. throw new Error("need name");
  11. }
  12. this.time = new Date();
  13. console.log(`${this.name}出生了`);
  14. },
  15. beforeDestroy() {
  16. const now = new Date();
  17. console.log(`${this.name}死亡了,共生存了 ${now - this.time} ms`);
  18. }
  19. };
  20. export default log;

在其他文件中引入mixins

  1. <template>
  2. <div>Child1</div>
  3. </template>
  4. <script>
  5. // 引入文件
  6. import log from "../mixins/log.js";
  7. export default {
  8. data() {
  9. return {
  10. name: "Child1"
  11. };
  12. },
  13. created() {
  14. console.log("Child 1 的 created");
  15. },
  16. // 设置mixins
  17. mixins: [log]
  18. };
  19. </script>

选项合并

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

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