mixin
混入是非常灵活的技术用来分发Vue 组件中的可复用功能。一个混入对象可以包含任意组件选项。当组件使用混入对象时,所有混入对象的选项将被“混合”进入该组件本身的选项
混入定义
var mixin = {
data:function(){return {info:"this is a mixin"}},
created(){console.log("this is mixin created");},
methods:{foo(){return "this is mixin foo";}}
}
混入规则:
1)数据模型中的数据,会进行递归合并,出现同名属性,以组件中的数据为准
2)同名的构造函数会合并成数组,其中的函数都会调用,混入的钩子执行在前,组件的钩子执行在后
3)内部对象的合并,类似于components、methods回合并为一个对象,发生冲突时,以组件中的为准
全局混入
Vue.mixin({})
局部混入
mixins: [mixin]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="../js/vue.js"></script>
</head>
<body>
<div id="app">
<my-com></my-com>
</div>
<script>
let com = {
data() {
return {}
},
methods: {
},
template: `
<div>
我是组件
</div>
`
}
// 声明一个混入对象
let mixin = {
data() {
return {
msg: 'this is mixin data',
obj: {
name: 'wangwu',
gender: 'male'
}
}
},
methods: {
myFun() {
console.log('this is mixin funtion');
}
},
created() {
console.log('this is mixin created');
}
}
// 全局混入
Vue.mixin(mixin)
let vm = new Vue({
el: "#app",
data: {
name: '张三',
obj: {
name: 'lisi',
age: 12
}
},
methods: {
myFun() {
console.log('this is vue funtion');
return 'Nihao'
}
},
created() {
console.log('this is vue created');
},
// 混入对象的局部注册
// mixins: [mixin]
components: {
myCom: com
}
})
</script>
</body>
</html>