Vue中使用mixins混入

本文详细介绍了Vue中的mixins功能,包括混入的定义、混入与组件的区别、为何使用混入以及实际项目中的应用案例。通过混入,可以实现组件间的数据和方法复用,提高开发效率。文章还展示了如何在组件中引入和使用mixins,以及全局混入的不推荐做法。示例代码展示了如何在Vue项目中创建和调用混入方法。

mixins在Vue中的用法

一、mixins混入

混入(mixins)提供了一种非常灵活的方式,来分发vue组件中的可服用功能。一个混入对象可以包含任意的组件选项(vue在script的部分)。当组件使用混入对象时,所有混入对象的选项都将被“混合”进入改组件本身的选项。

vue提供的一种混合机制,能够更好的实现组件功能复用,混合对象(mixins)可以包含任意组件选项(data、created、mounted、methods、filters等),组件引入后相关选项会进行合并,相当于引入后,父组件各属性进行扩充;

二、组件和mixins的区别

组件在引用之后相当于在父组件内开辟了一块单独的空间,来根据父组件props过来的值进行相应的操作,本质上两者还是泾渭分明,相对独立。

mixins则是在引入组件之后,是将组件内部的内容如data等方法、method等属性与父组件相应内容进行合并。相当于在引入后,父组件的各种属性方法都被扩充。

简单理解:减少代码冗余,提高开发效率,复用组件数据,方法等,以提高开发速度

三、为什么使用mixins
  • mixins分为全局混入和局部混入,下面我们着重讲局部混入
  • 注意不同组件混入之后,会生成不同的实例,数据会相互隔离,互不影响
  • 注意在引入mixins的同时,组件中重复定义,minxins中的属性方法会被覆盖
  • 使用 mixins 之后,该组件包含 mixins 中的所有数据,并且可以使用 this 进行访问。 您也可以使用变量而不是单独的文件来定义 mixins
四、Vue项目实际使用

新建src/minxins/index.js

// 引入下载文件接口
import { downTemplateFile } from '@/api/home'
// 导出 myMixins 函数
export const myMixins = {
  data() {
    return {

    }
  },
  methods: {
    // 下载方法,参数传文件ID
    toLogin(id) {
      downTemplateFile({ id1: id }).then(res => {
        if (res.size != 97) {
          let blob = new Blob([res])
          let objectUrl = window.URL.createObjectURL(blob)
          if (navigator.msSaveBlob) {
            return navigator.msSaveBlo(blob, '下载文件.doc')
          } else {
            let a = document.createElement('a')
            document.body.appendChild(a);
            a.style.display = 'none'
            a.setAttribute('href', objectUrl)
            a.setAttribute('download', '下载文件.doc')
            a.click();
            URL.revokeObjectURL(objectUrl);
          }
        } else {
          this.$message.error('系统错误,请稍后重试!')
        }
      })
    }
  }
}

index.vue引入注册并使用mixins

<template>
  <div class="index">
    <button @click="downLoadTempFile(1)">触发mixins下载方法</button>
  </div>
</template>
<script>
// 引入 myMixins 函数,导出什么就引入什么
import { myMixins } from '@/mixins';
export default {
  data(){
    return {
    }
  },
  // 注册
  mixins: [myMixins],
  methods:{
    async downLoadTempFile(id){
      // 直接使用this.方法名就可以调用到myMixins里的方法
      this.toLogin(id)
    },
  }
}
</script>
五、全局混入(不推荐)

main.js

import Vue from 'vue'
import App from './App.vue'

import { myMixins } from "@/mixins"

Vue.mixin(myMixins);

Vue.config.productionTip = false

new Vue({
  render: h => h(App),
}).$mount('#app')
### 使用 Vue 中的 Mixins #### 什么是 MixinsMixins 是一种用于在多个组件间复用代码的方式。它允许开发者定义一组可被混合到任意组件中的功能,从而减少重复代码并提高开发效率[^1]。 #### 如何使用 Mixins? 可以通过 `mixins` 属性将一个或多个混入选项注入到组件中。以下是具体的实现方式: ```javascript // 定义一个简单的 mixin const myMixin = { data() { return { sharedProperty: 'This is from the mixin' }; }, methods: { sharedMethod() { console.log('Shared method called'); } } }; export default { mixins: [myMixin], created() { console.log(this.sharedProperty); // 输出:This is from the mixin this.sharedMethod(); // 控制台打印:Shared method called } }; ``` 上述例子展示了如何通过 `mixins` 将数据属性和方法引入到组件中[^2]。 #### 处理 Mixins 和组件间的冲突 当同一个选项(如 `data` 或者 `methods`)存在于多个 mixins 或组件本身时,Vue 提供了一套规则来解决这些冲突。通常情况下,组件本身的选项具有最高优先级;如果存在同名的方法,则组件内的方法会覆盖来自 mixins 的方法[^3]。 以下是一个关于生命周期钩子的例子: ```javascript const lifecycleMixin = { mounted() { console.log('Lifecycle hook from mixin'); } }; export default { mixins: [lifecycleMixin], mounted() { console.log('Component-specific lifecycle hook'); } }; ``` 运行此代码后,在控制台上可以看到两个日志依次输出:“Lifecycle hook from mixin” 和 “Component-specific lifecycle hook”。这表明即使有相同的生命周期钩子名称,两者也会按顺序执行而不会发生覆盖。 #### 注意事项 尽管 Mixins 能够极大地促进代码重用,但也需要注意其潜在复杂性和维护成本。随着项目规模增大以及更多复杂的逻辑加入其中,可能会导致难以追踪的行为或者意外的结果。因此建议合理规划应用结构,并谨慎评估何时应该采用 Mixins 来解决问题。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端大斗师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值