mixin初始化:https://www.deboy.cn/Vue-mixins-advance-tips.html
mixin
官网上:混入 (mixin) 提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能。一个混入对象可以包含任意组件选项。当组件使用混入对象时,所有混入对象的选项将被“混合”进入该组件本身的选项。
个人理解:mixin就是全局注册一个混入,注册之后所有创建的每个 Vue 实例。例如给全部文件添加一些公用的实例(如方法、过滤器等)插件作者可以使用混入,向组件注入自定义的行为。不推荐在应用代码中使用。
1.新建文件mixin.js
//抛出混入对象,方便外部访问
export const mixin = {
data() {
return {
}
},
methods: {
},
}
export default mixin
2.在main.js全局引用
import mixin from "./mixin";
Vue.mixin(mixin);
3.其他vue页面里面就可以使用mixin里面定义好的方法,和数据如:
export const mixin = {
data() {
return {
tip: false,
number: 10,
}
},
methods: {
clickShow() {
this.tip = !this.tip
},
alerts() {
alert('对不起,请重试')
},
},
}
export default mixin
4.在页面引用:
<div>
page1的值是:{{number}}{{tip}}
<button @click="clickShow">显示隐藏</button>
<div v-if="tip">我是mixin控制显示隐藏的</div>
</div>
组件与mixin的区别是:
组件:在父组件中引入组件,相当于在父组件中给出一片独立的空间供子组件使用,然后根据props来传值,但本质上两者是相对独立的。
Mixins:则是在引入组件之后与组件中的对象和方法进行合并,相当于扩展了父组件的对象与方法,可以理解为形成了一个新的组件。
但要注意的是,如果页面有组件有mxins两者并且有键值冲突时优先会以组件的值为准。我一般都用它是管理一些全局的弹框,显示隐藏一类的。
转自:https://www.jianshu.com/p/47e25a505037
mixins的使用方法和注意点
定义一个混入对象
把混入对象混入到当前的组件中
用法似不似相当简单呀
mixins的特点
1 方法和参数在各组件中不共享
混合对象中的参数num
组件1中的参数num进行+1的操作
组件2中的参数num未进行操作
两组件中分别输出的num值
大家可以看到,我在组件1里改变了num里面的值,组件2中的num值还是混入对象里的初始值
2 值为对象的选项,如methods,components等,选项会被合并,键冲突的组件会覆盖混入对象的
混入对象中的方法
组件中的方法
打印台的输出
3 值为函数的选项,如created,mounted等,就会被合并调用,混合对象里的钩子函数在组件里的钩子函数之前调用
混入对象函数中的console
组件函数中的console
打印台的打印
与vuex的区别
经过上面的例子之后,他们之间的区别应该很明显了哈~
vuex:用来做状态管理的,里面定义的变量在每个组件中均可以使用和修改,在任一组件中修改此变量的值之后,其他组件中此变量的值也会随之修改。
Mixins:可以定义共用的变量,在每个组件中使用,引入组件中之后,各个变量是相互独立的,值的修改在组件中不会相互影响。
与公共组件的区别
组件:在父组件中引入组件,相当于在父组件中给出一片独立的空间供子组件使用,然后根据props来传值,但本质上两者是相对独立的。
Mixins:则是在引入组件之后与组件中的对象和方法进行合并,相当于扩展了父组件的对象与方法,可以理解为形成了一个新的组件。
转自:https://www.jianshu.com/p/bcff647d24ec
可以混入多个mixins对象
//暴露两个mixins对象
export const mixinsTest = {
methods: {
hello() {
console.log("hello mixins");
}
},
created() {
this.hello();
},
}
export const mixinsTest2 = {
methods:{
hello2(){
console.log("hello2");
}
},
created() {
this.hello2();
},
}
组件中引入两个mixins对象
<template>
<div>
home
</div>
</template>
<script>
import {mixinsTest,mixinsTest2} from '../util/test.js'
export default {
name: "Home",
data () {
return {
};
},
created(){
console.log("1212");
},
mixins:[mixinsTest2,mixinsTest] // 先调用那个mixins对象,就先执行哪个
}
</script>
<style lang="css" scoped>
</style>
打印的顺序是: