vue 混入-19
2018-11-22 本文已影响0人
尼莫nemo
什么是混入
混入 (mixins) 是一种分发 Vue 组件中可复用功能的非常灵活的方式。
混入对象可以包含任意组件选项。
当组件使用混入对象时,所有混入对象的选项将被混入该组件本身的选项。
// 定义一个混入对象
//对象中使用this是因为我他定义的是混入组件 他将要合并到组件中求
var myMixin = {
created: function () {
this.hello()
},
methods: {
hello: function () {
console.log('hello from mixin!')
}
}
}
// 定义一个使用混入对象的组件
var Component = Vue.extend({
mixins: [myMixin]
})
//在调用组件的时候因为混入对象中书写了created,他会作为组件的生命周期来使用
var component = new Component() // => "hello from mixin!"
混入的合并
- 当组件和混入对象 含有同名选项的时候,这些选项将以恰当的方式混合
比如数据对象在内部会进行浅合并,在和组件的数据发生冲突的时候以组件数据优先
var mixin = {
data: function () {
return {
message: 'hello',
foo: 'abc'
}
}
}
new Vue({
mixins: [mixin],
data: function () {
return {
message: 'goodbye',
bar: 'def'
}
},
created: function () {
console.log(this.$data)
// => { message: "goodbye", foo: "abc", bar: "def" }
}
})
- 同名钩子函数之间的混入会被混合成一个数组,因此都会被调用。混入对象的钩子会在组件自身的钩子之前调用
var mixin = {
created: function () {
console.log('混入对象的钩子被调用')
}
}
new Vue({
mixins: [mixin],
created: function () {
console.log('组件钩子被调用')
}
})
// => "混入对象的钩子被调用"
// => "组件钩子被调用"
- 值对象的选项,例如methods,components和directives将被混合为同一个对象。两个对象键名重估,
取消组件的键值对,注意是取不是取消
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() // => "foo"
vm.bar() // => "bar"
vm.conflicting() // => "from self"
全局混入对象会影响创建实例的每一个
// 为自定义的选项 'myOption' 注入一个处理器。
Vue.mixin({
created: function () {
var myOption = this.$options.myOption
if (myOption) {
console.log(myOption)
}
}
})
new Vue({
myOption: 'hello!'
})
// => "hello!"
谨慎使用全局混入对象
自定义选项合并策略
用的时候在来看