概述
再日常开发中,对于组件内部的方法多处存在相同的特点,往往会抽离出一个公共的方法方便调用,但是由于多个组件可能都需要用到这个方法,所以通过mixin混入的方式,将该方法独立抽离出来,方便多个组件的使用。
步骤
- 再src目录下创建一个mixins
- 再该目录下创建一个xxxx.js文件
- 编写对应的js代码
- 再组件内引入
import xxx from '@/mixins/xxx'
- 再组件js代码中 通过关键字
mixins:[xxxx]
可以混入多个,后面优先级更高
完整演示:
给定义一个弹出,当用户执行某些操作时,需要用户登录才可以执行
export default {
// 此处编写的就是Vue组件实例的配置项,通过一定语法,可以直接混入到组件内部
// data 、 methods 、 computed 、 声明周期函数... 等
// 注意点: 如果此处 和 组件内 提供了同名的 data 或 methods,则组件内优先级更高
// 1.如果此处 和 组件内,提供了同名的 data 或 methods,则组件内优先级更高
// 2.如果编写了声明周期函数,则mixins中的生命周期函数 和 页面的生命周期函数,会用数组管理
// 统一执行
methods: {
// 根据登录状态,判断是否需要显示登录确认框
// 1.如果未登录=>显示确认框 返回true
// 2.如果已登录=> 啥也不干 返回false
loginConfirm () {
// 判断 token 是否存在
// 1.如果token不存在,弹确认框
// 2.如果token存在,继续请求操作
if (!this.$store.getters.token) {
// 弹确认框
this.$dialog.confirm({
title: '温馨提示',
message: '此时需要先登录才能继续操作哦',
confirmButtonText: '去登录',
cancelButtonText: '再逛逛'
})
.then(() => {
// 点击确认表示用户要去登录界面,此时让路由跳转
// 如果希望,跳转到登录 =》登录后能回跳回来,需要在跳转去携带参数,(当前的路径地址)
// this.$route.fullPath(会包含查询参数)
this.$router.replace({
path: '/login',
query: {
backUrl: this.$route.fullPath
}
})
})
.catch(() => {
// on cancel
})
return true
}
return false
}
}
}
再组件中导入 loginConfirm.js文件 ,随后通过 mixins:[loginConfirm]
混入该方法