一、什么是Mixins?

mixins(混入),官方的描述是一种分发 Vue 组件中可复用功能的非常灵活的方式,mixins是一个js对象,它可以包含我们组件中script项中的任意功能选项,如data、components、methods 、created、computed等等。我们只要将共用的功能以对象的方式传入 mixins选项中,当组件使用 mixins对象时所有mixins对象的选项都将被混入该组件本身的选项中来,这样就可以提高代码的重用性,使你的代码保持干净和易于维护。

二、什么时候使用Mixins?

当我们存在多个组件中的数据或者功能很相近时,我们就可以利用mixins将公共部分提取出来,通过 mixins封装的函数,组件调用他们是不会改变函数作用域外部的。

三、如何创建Mixins?

在src目录下创建一个mixins文件夹,文件夹下新建一个myMixins.js文件。前面我们说了mixins是一个js对象,所以应该以对象的形式来定义myMixins,在对象中我们可以和vue组件一样来定义我们的data、components、methods 、created、computed等属性,并通过export导出该对象
myMixins.js:

// myMixins.js
export default {data () {return {num:1}},mounted() {this.speak();},methods: {speak() {console.log(this.num);},}
}

四、如何在组件中使用Mixins?

在需要调用的组件中引入myMixins.js文件,然后在export default 中引入你需要的对象即可

五、Mixins的特点

1)方法和参数在各组件中不共享,虽然组件调用了mixins并将其属性合并到自身组件中来了,但是其属性只会被当前组件所识别并不会被共享,也就是其他组件无法从当前组件中获取到mixins中的数据和方法。

① todo.vue:组件1中对num进行+1操作

// todo.vue
// 引入 myMixins.js 文件
import {myMixins} from './myMixins';export default {mixins: [myMixins],data() {return {}},created() {this.num++},}

② list.vue 组件2不进行操作

// list.vue
import {myMixins} from './myMixins';export default {mixins: [myMixins],data() {return {}},
}

③ 分别切换到两个页面,查看控制台输出

会发现组件1改变了num里面的值,组件2中num值还是混合对象的初始值,并没有随着组件1的增加而改变

(2)引入mixins后组件会对其进行合并,将mixins中的数据和方法拓展到当前组件中来,在合并的过程中会出现冲突,接下来我们详细了解Mixins合并冲突

六、关于Mixins合并冲突

1)值为对象(components、methods 、computed、data)的选项,混入组件时选项会被合并,键冲突时优先组件,组件中的键会覆盖混入对象的

① 我们在混入对象增加num属性、getDate1方法和getDate2方法

// myMixins.js
export const myMixins = {components:{},data() {return {num: 1,}},methods: {getDate1() {console.log("num1 from mixins =", this.num )},getDate2() {console.log("num2 from mixins =", this.num )},}
}

② 我们在引入了myMixins文件的 todo.vue 组件中,增加num属性、getDate1方法和getDate3方法

// todo.vue
import { myMixins } from "./myMixins.js";
export default {mixins: [myMixins],data() {return {num: 18,}},mounted() {this.getDate1();this.getDate2();this.getDate3();},methods: {getDate1() {console.log('num1 from template =', this.num)},getDate3() {console.log('num3 from template =', this.num)},}
}

③ 我们会发现,组件中的age覆盖了混合对象的age,todo.vue 组件的getDate1方法覆盖了混合对象的getDate1方法

(2)值为函数(created、mounted)的选项,混入组件时选项会被合并调用,混合对象里的钩子函数在组件里的钩子函数之前调用

myMixins.js 中的console:

// myMixins.js
export const myMixins = {components:{},data() {return {}},created() {console.log('hello from mixin')}

todo.vue 中的 console

// todo.vue
import { myMixins } from "./myMixins.js";export default {mixins: [myMixins],data() {return {}},created() {console.log('hello from self')}
}

控制台打印

七、vue中mixins的使用方法和注意点 (异步请求的情况)

当混合里面包含异步请求函数,而我们又需要在组件中使用异步请求函数的返回值时,我们会取不到此返回值,如下:

Mymixins.js文件中

// myMixins.js
export const myMixins = {components:{},data() {return {num: 1,}},methods: {getDate1() {new Promise((resolve,reject) => {let a = 1;setTimeout(() => {resolve(a)},500)}).then(res => {console.log(res,'res');return res})},}
}

todo.vue 文件中

// todo.vue
import { myMixins } from "./myMixins.js";export default {mixins: [myMixins],data() {return {}},mounted() {console.log(this.getDate1,'template1-func_one')}
}


解决方案:不要返回结果而是直接返回异步函数

Mymixins.js文件中

// myMixins.js
export const myMixins = {components:{},data() {return {num: 1,}},methods: {async getDate1() {let result = await new Promise((resolve,reject) => {let a = 1;setTimeout(() => {resolve(1)},500)})return result},}
}

todo.vue 文件中

// todo.vue
import { myMixins } from "./myMixins.js";export default {mixins: [myMixins],data() {return {}},mounted() {this.getDate1().then(res => {console.log(res,'template1-res')})}
}

vue中mixins的使用方法和注意地方相关推荐

  1. vue中mixins的使用方法

    参考官网以及网上的一些资料,最基本的用法 混入 (mixin) 提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能.一个混入对象可以包含任意组件选项.当组件使用混入对象时,所有混入对象的选项 ...

  2. 【Vue】Vue中mixins的使用方法及实际项目应用详解

    文章目录 (1)mixin基础 (2)mixin特点 1.选项合并 2.方法和参数在各组件中不共享 (3)mixin与vuex的区别 (4)mixin与公共组件的区别 (5)项目实践 (6)总结 (1 ...

  3. vue 中 mixins 的使用

    本文同步发布在:vue 中 mixins 的使用 mixins(混入)就是定义了一部分公共的方法.计算属性或者钩子函数等 vue 组件中的可复用功能,然后混合进各个组件中使用.下面我们具体来看看怎么使 ...

  4. vue中文件上传方法

    vue中文件上传方法(图片,表格) //html部分 <input type="file" id="people-export" ref="in ...

  5. vue中使用vue-awesome-swiper的方法(实现一屏展示多个图片,点击左右滚动一张)

    vue中使用vue-awesome-swiper的方法 (awesome-swiper demo官网)[https://surmon-china.github.io/vue-awesome-swipe ...

  6. vue中组件之间调用方法——子组件调用父组件的方法 父组件调用子组件的方法

    vue中组件之间调用方法--子组件调用父组件的方法 & 父组件调用子组件的方法 1.vue中子组件调用父组件的方法 1.1.第一种方法是直接在子组件中通过this.$parent.event来 ...

  7. Vue中的this.$nextTick方法的使用 [前端][Vue框架]

    Vue中的this.$nextTick方法的使用 因为在vue中当组件的data中的数据发生了变化之后, 如果这个data中的数据与某个Dom元素有关, 那么这个时候这个Dom元素不会立即更新, vu ...

  8. 解决vue中无法取得methods方法中的return值

    解决vue中无法取得methods方法中的return值 参考文章: (1)解决vue中无法取得methods方法中的return值 (2)https://www.cnblogs.com/betty- ...

  9. Element组件引发的Vue中mixins使用,写出高复用组件

    我们都知道 Vue 采用的是一种组件化开发模式,组件在 Vue 中一个非常重要的核心概念.每个组件都是一个完整的实例,组件的创建,组件间的通讯,组件如何更好的复用,以及整个的生命周期的钩子.所以你会发 ...

最新文章

  1. 【Qt】ubuntu QtCreator的pro文件中使用pkg-config
  2. 积极拥抱.NET Core开源社区
  3. 文本编辑BOM标记(Byte Order Mark)
  4. NLP免费直播 | 两周详解BERT、知识图谱、对话生成、图卷积神经网络
  5. C++中的string类型转换为int类型
  6. Java 结构体之 JavaStruct 使用教程三 JavaStruct 数组进阶
  7. linux重启网络服务_vm上linux虚拟机NAT模式配置
  8. 在线播放器 在网页中插入MediaPlayer 兼容IE和FF的代码调试
  9. 谈谈运维监控那些事儿
  10. C4D快速入门教程——倒角
  11. 二进制转四进制计算机,计算机进制转换方法
  12. Python3爬虫中Selenium的用法详解
  13. 用C语言编程验证 “ 哥德巴赫猜想 ”
  14. 分布式系统原理(5)Quorum 机制
  15. 自定义插入页面标签以及实现类似通讯录的首字母搜索
  16. 20135337朱荟潼 Linux第二周学习总结——操作系统是如何工作的
  17. 详解SAN存储技术的前世今生
  18. PyQt5最全26 绘图之drawPoint用像素点绘制正弦曲线
  19. r7000p装linux双系统,联想拯救者 刃7000台式机设置u盘启动(支持uefi/bios双启动)
  20. python统计西游记人物名字出现次数_Python文本统计功能之西游记用字统计操作示例...

热门文章

  1. 读WAF与IPS的区别总结之摘抄
  2. hadoop关键进程
  3. LinearLayout的一些注意事项
  4. 规则引擎:大厂营销系统资格设计全解
  5. DataX配置及使用
  6. 《JavaScript设计模式与开发实践》模式篇(3)—— 代理模式
  7. 文件名利用RLO技术欺骗(学习)
  8. OCP考试052考试,新的考题还有答案整理-23题
  9. OSChina 周四乱弹 ——我高考,媳妇还在读小学
  10. SVN入门:流程简介 安装配置 项目库配置 客户端 上线方案