Day 29 - 用Mixins来共用方法

相信经过了前面二十几天的洗礼,小夥伴们应该都对Vue有了一定的掌握度了吧~
今天要来提到的是Vue的Mixins。

甚麽是Mixins?

Mixin 是一种让元件之间彼此共用方法的方法,可以将常使用的方法独立抽出放在mixins,避免重复出现。
使用Mixin,可以让所有 component 的选项都可以拿来使用 (created, computed…),当 component 使用 mixin 时,mixin 本身的选项都会和 component 自己的选项混合在一起。
虽然Mixins在Vue3中被composition api取代,不过我们这里还是继续来看一下。
例如下面的例子中,我们定义了一个mixin物件,并在component中进行使用。

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!"

原始码:
https://codepen.io/adjwcmzg/pen/WNEQOdx

选项合并 Option Merging

不过,既然是混入原本不属於元件的方法,就有可能会与原本的元件方法产生冲突。
当元件和mixin对象含有同名选项时,这些选项将会进行合并,并在发生冲突时以元件数据优先。

如果是hook的话(Created, etc.),将会被合并成一个阵列,所以不管是元件的还是mixins的,都会被执行,不过mixins的会早於元件本身。

var mixin = {
  created: function() {
    console.log('mixin hook called');
  },
};

new Vue({
  mixins: [mixin],
  created: function() {
    console.log('component hook called');
  },
});

原始码:
https://codepen.io/adjwcmzg/pen/jOLbwKy

不过如果是Methods, Components and Directives话,有冲突时会无条件选用元件的 option。

var mixin = {
  methods: {
    foo: function() {
      console.log('foo');
    },
    conflicting: function() {
      console.log('from mixin');
    },
  },
};

var vm = new Vue({
  mixins: [mixin],
  methods: {
    bar: function() {
      console.log('bar');
    },
    conflicting: function() {
      console.log('from self');
    },
  },
});

vm.foo();
vm.bar();
vm.conflicting();

从Console可以看出,Mixins中的"from mixins"被舍去了。

原始码:
https://codepen.io/adjwcmzg/pen/GRvpEYR

Global Mixin

不过,看到这边,那你一定会想,那我可以全域引用mixins物件吗?
答案当然是肯定的,不过一旦全域引用,就会影响所有的Vue实例以及之後建立的Component,包括第三方元件喔,所以要谨慎使用。

Vue.mixin({
  created: function() {
    var myOption = this.$options.myOption;
    if (myOption) {
      console.log(myOption);
    }
  },
});

new Vue({
  myOption: 'Hello World!',
});

原始码:
https://codepen.io/adjwcmzg/pen/WNEQOLR


<<:  连续 30 天 玩玩看 ProtoPie - Day 29

>>:  撒尿牛丸 - 整合 flask, LineBot

Render Functions

今天要介绍的是Render Functions 先来看一段官网对render function的介绍...

IT 铁人赛 k8s 入门30天 -- day1 什麽是k8s? k8s能做到什麽?

前言 身为一位 常常在使用容器的开发者 对於容器的管理是一件很重要的事情 特别是在大量使用容器的时候...

安全功能(security function)

. 根据NIST术语表,安全功能是指系统级别的“系统或系统元素提供的功能” 。 . 独立安全审核的...

iOS APP 开发 OC 第十一天,使用 typedef 简化 block

tags: OC 30 day 问题:简化block变量的时候,要写好大一串,类型好长。 typed...

Day 4-Visual Studio 环境安装与介绍第一只测试专案 HelloBank (基础-3)

工欲善其事,必先利其器—该先装 Visual Studio 了 今天的内容会开始介绍我们要使用的整合...