Vue之mixin和mixins

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.在页面引用:

page1的值是:{{number}}{{tip}}
我是mixin控制显示隐藏的

组件与mixin的区别是:
组件:在父组件中引入组件,相当于在父组件中给出一片独立的空间供子组件使用,然后根据props来传值,但本质上两者是相对独立的。
Mixins:则是在引入组件之后与组件中的对象和方法进行合并,相当于扩展了父组件的对象与方法,可以理解为形成了一个新的组件。
但要注意的是,如果页面有组件有mxins两者并且有键值冲突时优先会以组件的值为准。我一般都用它是管理一些全局的弹框,显示隐藏一类的。

转自:https://www.jianshu.com/p/47e25a505037

mixins的使用方法和注意点

定义一个混入对象


image.png

把混入对象混入到当前的组件中


image.png

用法似不似相当简单呀

mixins的特点

1 方法和参数在各组件中不共享

混合对象中的参数num


image.png

组件1中的参数num进行+1的操作


image.png

组件2中的参数num未进行操作
image.png

两组件中分别输出的num值


image.png

image.png

大家可以看到,我在组件1里改变了num里面的值,组件2中的num值还是混入对象里的初始值

2 值为对象的选项,如methods,components等,选项会被合并,键冲突的组件会覆盖混入对象的

混入对象中的方法


image.png

组件中的方法


image.png

打印台的输出
image.png

3 值为函数的选项,如created,mounted等,就会被合并调用,混合对象里的钩子函数在组件里的钩子函数之前调用

混入对象函数中的console


image.png

组件函数中的console


image.png

打印台的打印
image.png

与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对象




打印的顺序是:


image.png

你可能感兴趣的:(Vue之mixin和mixins)