• vue中的mixin(局部混入、全局混入)


    一、mixin是什么

    Mixin面向对象程序设计语言中的类,提供了方法的实现。其他类可以访问mixin类的方法而不必成为其子类;Mixin类通常作为功能模块使用,在需要该功能时“混入”,有利于代码复用又避免了多继承的复杂

    Vue中的mixin,先来看一下官方定义

    mixin(混入),提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能。本质其实就是一个js对象,它可以包含我们组件中任意功能选项,如data、components、methods、created、computed等等

    在Vue中我们可以局部混入跟全局混入

    局部混入

    定义一个 mixins.js 文件,此文件中可以混入Vue中所有的设置项,methods、computed、watch、data、生命周期函数等都可以。

    1. // mixin.js
    2. export const myMixin = {
    3. methods: {
    4. sharedMethod() {
    5. console.log('This method is shared between components.');
    6. }
    7. }
    8. };
    1. // MyComponent.vue
    2. <script>
    3. import { myMixin } from './mixin.js';
    4. export default {
    5. mixins: [myMixin],
    6. // 组件自己的选项...
    7. };
    8. script>

    全局混入

    全局混入表示混入到Vue对象中,Vue下的所有组件都会使用混入的方法,一定要注意,是所有的组件,所以,在使用全局混入的时候要确保所有的组件都会使用到。

    如果在使用混入的过程中出现冲突,除生命周期钩子外,其余的都以本组件中的为主,混入的不生效;生命周期钩子产生冲突是先执行混入的声明周期钩子,再执行本组件的生命周期钩子。 

    1. //main.js文件
    2. import {mixin1, mixin2} from "../mixins.js"
    3. Vue.mixin(mixin1)
    4. Vue.mixin(mixin2)
    1. //如果不想创建单独的类,也可以直接写一个配置对象
    2. Vue.mixin({
    3.   created: function () {
    4.       console.log("全局混入")
    5.     }
    6. })

    PS:全局混入常用于插件的编写,使用全局混入需要特别注意,因为它会影响到每一个组件实例(包括第三方组件)

    二、使用场景

    在日常的开发中,我们经常会遇到在不同的组件中经常会需要用到一些功能相同或者相似的代码(造成代码冗余),这时可以通过Vue的mixin功能将相同或者相似的代码抽取出来。

    举个例子

    定义一个modal弹窗组件,内部通过isShowing来控制显示

    1. const Modal = {
    2.   template: '#modal',
    3.   data() {
    4.     return {
    5.       isShowing: false
    6.     }
    7.   },
    8.   methods: {
    9.     toggleShow() {
    10.       this.isShowing = !this.isShowing;
    11.     }
    12.   }
    13. }



    定义一个tooltip提示框,内部通过isShowing来控制显示

    1. const Tooltip = {
    2.   template: '#tooltip',
    3.   data() {
    4.     return {
    5.       isShowing: false
    6.     }
    7.   },
    8.   methods: {
    9.     toggleShow() {
    10.       this.isShowing = !this.isShowing;
    11.     }
    12.   }
    13. }



    通过观察上面两个组件,发现两者的逻辑是相同,代码控制显示也是相同的,这时候mixin就派上用场了

    首先抽出共同代码,编写一个mixin

    1. const toggle = {
    2.   data() {
    3.     return {
    4.       isShowing: false
    5.     }
    6.   },
    7.   methods: {
    8.     toggleShow() {
    9.       this.isShowing = !this.isShowing;
    10.     }
    11.   }
    12. }

    两个组件在使用上,只需要引入mixin

    1. const Modal = {
    2.   template: '#modal',
    3.   mixins: [toggle]
    4. };
    5.  
    6. const Tooltip = {
    7.   template: '#tooltip',
    8.   mixins: [toggle]
    9. }
  • 相关阅读:
    v-model和.sync区别
    【OpenCV】在 Mac OS 上使用 EmguCV
    西山居测试开发工程师一面
    nordic平台SDK包下载地址
    【ARM】MDK自动备份源文件
    bean的生命周期
    创业公司节省成本、减少支出都有哪些招?
    kubekey 离线部署 kubesphere v3.3.0
    c# var vs dynamic
    安全性算法
  • 原文地址:https://blog.csdn.net/RreamigOfGirls/article/details/138175465