vue中的混入

在开发过程中,可能会发生同一个内容在很多个组件中都有使用的情况,而在每个组件中单独编写内容既费时也不好维护,所以vue提供了一个配置项来解决这一问题,也就是mixin配置项.

本文将简述mixin的使用方法

新建一个项目后,准备2个新组件

组件1:

<template>
    <div class="student">
        <h2 @click="showName">学生姓名:{{name}}</h2>
        <h2>学生年龄:{{age}}</h2>
    </div>
</template>


<script>
    export default {
        name:'my-student',
        data(){
            return {
                msg:'我是名学生',
                age:30,
                name:'张三',
            }
        },
        methods:{
            showName(){
                alert(this.name);
            }
        },
    }
    
</script>

组件2:

<template>
    <div class="demo">
        <h2 @click="showName">学校名称:{{name}}</h2>
        <h2>学校地址:{{address}}</h2>
    </div>
</template>


<script>
    export default {
        name:'my-school',
        data(){
            return {
                msg:'我是一所学校',
                name:'育才中学',
                address:'beijing'
            }
        },
        methods: {
            showName(){
                alert(this.name);
            },
        },
    }
    
</script>

在上述两个组件中,有相同的methods,则可以将它们放到一个专门的文件中

下面开始介绍用法

第一步:

新建一个.js文件,例如就命名为mixin.js

将methods(即在不同组件中重复使用的代码)放到这个文件中,写成配置对象的形式,然后export这个对象

export const mixin_test = {
    methods: {
        showName() {
            alert(this.name);
        }
    },
}

第二步:

在需要用到这个methods的组件中import(引入)这个文件

在组件1中:

import { mixin_test } from '@/mixin';

然后再在该组件中添加mixins配置项,写法如下:

mixins:[mixin_test]

组件2进行相同的操作

这样mixin.js中的内容就混入到了组件1和组件2中,可以使用了

mixin.js中的内容不仅仅局限于methods,也可以是其他的,比如data配置项,computed配置项等等

例如,在每个组件中有同一个data属性,那么就放到mixin.js文件中:

export const mixin_test = {
    methods: {
        showName() {
            alert(this.name);
        },
        showTestText() {
            alert(this.testText);
        }
    },
    data() {
        return {
            testText: '我是共有的属性,所以我可以被放在mixin.js文件中'
        }
    }
}

对应的组件模板:

<template>
    <div class="student">
        <h2 @click="showName">学生姓名:{{name}}</h2>
        <h2>学生年龄:{{age}}</h2>
        <button @click="showTestText">点我显示共有的text</button>
    </div>
</template>

点击按钮后的页面提示:

如果出现mixin中的内容与某个组件中的内容冲突,比如mixin的data中有myown属性,而在组件1的data中也有myown属性:

//组件1的data
data(){
            return {
                msg:'我是名学生',
                age:30,
                name:'张三',
                sex:'男',
                myown:'这是属于student组件的内容'
            }
        },
//mixin.js中的data
data() {
        return {
            testText: '我是共有的属性,所以我可以被放在mixin.js文件中',
            myown: '这是mixin.js文件的内容'
        }
    },

创建点击按钮进行测试

<button @click="showMyOwn">点我显示myown</button>
showMyOwn() {
            alert(this.myown);
        }

页面显示结果:

可见,组件自身的内容的优先级更高,如果组件自身没有这项属性,混入后就会显示混入的属性

上述的mixin.js文件的引用,都是在每个组件里面单独引用,这种引用方式叫局部引用

还有另一种引用方式叫全局引用,指在main.js中引用.引用方式如下:

在main.js中输入以下代码即可,其中"xxx"是你自己命名的混入对象的名字

import { xxx } from './mixin'
Vue.mixin(xxx)

这样整个项目中的Vue实例对象和组件实例对象就都可以使用mixin中的内容了

注意:上述代码必须写在你创建Vue实例对象之前,否则是没用的!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值