相信经过了前面二十几天的洗礼,小夥伴们应该都对Vue有了一定的掌握度了吧~
今天要来提到的是Vue的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
不过,既然是混入原本不属於元件的方法,就有可能会与原本的元件方法产生冲突。
当元件和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
不过,看到这边,那你一定会想,那我可以全域引用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
今天要介绍的是Render Functions 先来看一段官网对render function的介绍...
前言 身为一位 常常在使用容器的开发者 对於容器的管理是一件很重要的事情 特别是在大量使用容器的时候...
. 根据NIST术语表,安全功能是指系统级别的“系统或系统元素提供的功能” 。 . 独立安全审核的...
tags: OC 30 day 问题:简化block变量的时候,要写好大一串,类型好长。 typed...
工欲善其事,必先利其器—该先装 Visual Studio 了 今天的内容会开始介绍我们要使用的整合...