Vue-组件混入Mixin配置-减少代码冗余

Vue-组件混入Mixin配置

1. 什么是Mixin?

学过面向对象的小伙伴,应该对Mixin这个词不陌生,尤其是Python中的多继承,Py后端小伙伴在Django中也许对Mixin这个词太熟悉了。

其实简单来讲,Mixin就是"添加功能",也可以说成"插件"

  • 将一个功能封装成一个对象
  • 例如我们定义了一个游泳的插件,谁插上这个插件,就学会了游泳。

2. Vue中的Mixin

Vue中称Mixin为"混入",就是多个组件共享一个相同的配置

2.1 需求分析

现在我们需要,让用户页面上的信息时,就弹窗提示

例如如下:

<template>
  <div>Student组件
    <span @click="showName">学生姓名:***</span>
  </div>
</template>

<script>
export default {
  name: "Student",
  data() {
    return {
      name: "小王"
    }
  },
  methods: {
    showName() {
      alert(this.name) //alert弹窗提示
    }
  }
}
</script>

这样看确实没啥,但是如果我这个功能,要在很多组件都要用,也就是说我现在Student组件要用,Teacher组件也要用,难道我就一直复制粘贴嘛???显然不可能

此时,我们就可以创建一个mixins.js,用于定义我们重复使用的函数

2.1 mixin.js的定义

mixin.js

export const mixin = {
    methods: {
        // 相当于全局定义了一个函数,showName
        showName() {
            alert(this.name)
        }
    }
}

2.2 组件中引入mixin

<template>
  <div>
      <!--  这里绑定了mixin的showName函数  -->
    <span @click="showName">老师姓名:***</span>
  </div>
</template>

<script>
import {mixin} from "@/mixins";
export default {
  name: "Teacher",
  data() {
    return {
      name: "李老师"
    }
  },
  mixins:[mixin] // 只需要引入mixin就可以
}
</script>

2.3 mixin的参数定义

mixin其实就相当于帮我们把需要重复定义的数据全部统一配置,减少代码冗余

所以我们mixin不仅可以配置methods,还可以配置data,mount

下面的mixin我额外配置了data,里面包含了name参数

export const mixin = {
    data(){
        return {
            name:"mixin配置的name"
        }
    },
    methods: {
        showName() {
            alert(this.name)
        }
    }
}

此时,如果我们哪个组件没有name,则会按照mixin中的name进行赋值,如果已经引入,则会将mixin中的覆盖!

2.4 mixin注意事项(生命周期函数)

对于Vue中的生命周期函数,mixin的引入,并不会覆盖函数,而是依次执行

并且执行顺序: mixin中的生命周期先执行

我们现在mixin的生命周期函数mounted中写了一个事件

mixin中定义

export const mixin = {
    mounted() {
        console.log('我是mixin中的mounted函数!!')
    }
}

组件中也定义

mounted() {
	console.log('我是组件中的mounted函数!!')
}

在这里插入图片描述

我们可以发现,mixin中的mounted函数,比组件中的更早被调用!

2.5 全局Mixin

上面的mixin,都需要我们在组件中通过mixins参数进行定义,但是我们可以通过Vue的全局配置,让所有的组件都有mixins

// 定义方法:在main.js引入mixin并使用Vue.mixin()
import Vue from 'vue'
import App from './App.vue'
import {mixin,mixin2} from "@/mixins";

Vue.mixin(mixin) // 全局配置mixin,注意这里的方法不带s
Vue.mixin(mixin2)

Vue.config.productionTip = false

new Vue({
  render: h => h(App),
}).$mount('#app')

此时该项目所有的Vue组件,都有了mixin和mixin2混入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值