vue混入mixin的使用,保证你看的明明白白!

简介: vue混入mixin的使用,保证你看的明明白白!

场景描述


有些时候,我们发现有些组件部分功能代码是几乎是一样的。


这个时候,我们就可以将相同的逻辑代码抽离出来


此时我们的主角混入mixin就登场了


下面我们有a-test和b-test两个组件,点击按钮发生的逻辑是一样的。


这个时候我们就可以使用混入mixin


a-test代码如下


<template>
    <div>
        <el-button  @click="openHander">点我呀</el-button>
        <h2 >我是a-test组件</h2>
        <h2>学校: {{ name}}</h2>
        <h2> 地址: {{ sex}}</h2>
        ============================
    </div>
</template>
<script>
import { mixinmethods} from "../mixin.js"
export default {
    data(){
        return {
            name:'xxx科技大学',
            sex:'四川'
        }
    },
    // methods:{
    //     openHander(){
    //         // 做了一些事情,因为跟b-test组件的功能相同,所以我们使用混入来解决
    //     }
    // }
    // mixins是固定的,里面传入一个数组
    mixins:[mixinmethods]
}
</script>


b-test组件代码如下


<template>
    <div>
        <el-button  @click="openHander">点我呀</el-button>
        <h2>我是b-test组件</h2>
        <h2> 学生姓名: {{ name}}</h2>
        <h2> 学生性别: {{ sex}}</h2>
    </div>
</template>
<script>
import { mixinmethods} from "../mixin.js"
    export default {
        data(){
            return {
                name:'李四',
                sex:'男'
            }
        },
        // methods:{
        //     openHander(){
        //         // 做了一些事情,因为跟a-test组件的功能相同,所以我们使用混入来解决
        //     }
        // }
        // mixins是固定的,里面传入一个数组
        mixins:[mixinmethods]
    }
</script>


mixin.js代码


export const mixinmethods = {
    // mixinmethods这个值随便你取
    methods:{
        openHander(){
            // mixin其实就是想将相同的模块抽离出去
            alert('混合')
            // 可分别拿到组件中的数据
            console.log(this.name);
        }
    }
}


1425695-20211028213127009-1078882426.png


在mixin中写声明周期


export const mixinmethods = {
    // mixinmethods这个值随便你取
    methods:{
        openHander(){
            // mixin其实就是想将相同的模块抽离出去
            alert('混合')
            // 可分别拿到组件中的数据
            console.log(this.name);
        }
    },
    // 因为这个混合在两个组件中使用,那么该声明周期就会被执行两次
    mounted() {
        console.log("我是混合中的生命周期")
    }
}


如果混合中的数据与组件中data的数据重复,会保留data中的数据


如果组件中data数据与混合中的数据重复了,


使用data中的数据。


组件中是可以直接使用混合中的数据的。


需要注意的是:声明周期不会以谁的为主


如果你在混合总共使用了生命周期,声明周期可能是都会执行。不会以谁的为主


export const mixinmethods = {
    data() {
        return {
            name:'lh',
            sex: '男',
            age:24
        }
    },
    // mixinmethods这个值随便你取
    methods:{
        openHander(){
            // mixin其实就是想将相同的模块抽离出去
            alert('混合')
            // 可分别拿到组件中的数据
            console.log(this.name);
        }
    },
    // 因为这个混合在两个组件中使用,那么该声明周期就会被执行两次
    mounted() {
        console.log("我是混合中的生命周期")
    }
}


<template>
    <div>
        <el-button @click="openHander">点我呀</el-button>
        <h2 >我是a-test组件</h2>
        <h2 >学校: {{ name}}</h2>
        <h2> 地址: {{ sex}}</h2>
        <h2> 年龄是混合中的数据 {{ age}}</h2>
        ============================
    </div>
</template>
<script>
import { mixinmethods} from "../mixin.js"
export default {
    data(){
        return {
            name:'xxx科技大学',
            sex:'四川'
        }
    },
    // mixins是固定的,里面传入一个数组
    mixins:[mixinmethods]
}
</script>


1425695-20211029194732626-949549033.png


全局混合


在main.js中全局引入,


这样vc,vm都可以得到[这样虽然是全局使用,但是会造成性能浪费]


import {yourkey1,yourkey2}  from "./mixn"


Vue.mixin(yourkey1)


Vue.mixin(yourkey2)


这样你就可以不需要在组件中引入了。直接在组件中使用混合就行


组件中使用 mixins:[yourkey1]

相关文章
|
2月前
|
JavaScript
Vue中如何实现兄弟组件之间的通信
在Vue中,兄弟组件可通过父组件中转、事件总线、Vuex/Pinia或provide/inject实现通信。小型项目推荐父组件中转或事件总线,大型项目建议使用Pinia等状态管理工具,确保数据流清晰可控,避免内存泄漏。
232 2
|
12天前
|
缓存 JavaScript
vue中的keep-alive问题(2)
vue中的keep-alive问题(2)
221 137
|
5月前
|
人工智能 JavaScript 算法
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
663 0
|
4月前
|
JavaScript 安全
在 Vue 中,如何在回调函数中正确使用 this?
在 Vue 中,如何在回调函数中正确使用 this?
165 0
|
4月前
|
人工智能 JSON JavaScript
VTJ.PRO 首发 MasterGo 设计智能识别引擎,秒级生成 Vue 代码
VTJ.PRO发布「AI MasterGo设计稿识别引擎」,成为全球首个支持解析MasterGo原生JSON文件并自动生成Vue组件的AI工具。通过双引擎架构,实现设计到代码全流程自动化,效率提升300%,助力企业降本增效,引领“设计即生产”新时代。
325 1
|
7月前
|
JavaScript
vue实现任务周期cron表达式选择组件
vue实现任务周期cron表达式选择组件
905 4
|
5月前
|
JavaScript UED
用组件懒加载优化Vue应用性能
用组件懒加载优化Vue应用性能
|
6月前
|
JavaScript 数据可视化 前端开发
基于 Vue 与 D3 的可拖拽拓扑图技术方案及应用案例解析
本文介绍了基于Vue和D3实现可拖拽拓扑图的技术方案与应用实例。通过Vue构建用户界面和交互逻辑,结合D3强大的数据可视化能力,实现了力导向布局、节点拖拽、交互事件等功能。文章详细讲解了数据模型设计、拖拽功能实现、组件封装及高级扩展(如节点类型定制、连接样式优化等),并提供了性能优化方案以应对大数据量场景。最终,展示了基础网络拓扑、实时更新拓扑等应用实例,为开发者提供了一套完整的实现思路和实践经验。
671 77
|
7月前
|
缓存 JavaScript 前端开发
Vue 基础语法介绍
Vue 基础语法介绍
|
5月前
|
JavaScript 前端开发 开发者
Vue 自定义进度条组件封装及使用方法详解
这是一篇关于自定义进度条组件的使用指南和开发文档。文章详细介绍了如何在Vue项目中引入、注册并使用该组件,包括基础与高级示例。组件支持分段配置(如颜色、文本)、动画效果及超出进度提示等功能。同时提供了完整的代码实现,支持全局注册,并提出了优化建议,如主题支持、响应式设计等,帮助开发者更灵活地集成和定制进度条组件。资源链接已提供,适合前端开发者参考学习。
418 17