vue中mixins的使用方法和注意地方
一、什么是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的使用方法和注意地方相关推荐
- vue中mixins的使用方法
参考官网以及网上的一些资料,最基本的用法 混入 (mixin) 提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能.一个混入对象可以包含任意组件选项.当组件使用混入对象时,所有混入对象的选项 ...
- 【Vue】Vue中mixins的使用方法及实际项目应用详解
文章目录 (1)mixin基础 (2)mixin特点 1.选项合并 2.方法和参数在各组件中不共享 (3)mixin与vuex的区别 (4)mixin与公共组件的区别 (5)项目实践 (6)总结 (1 ...
- vue 中 mixins 的使用
本文同步发布在:vue 中 mixins 的使用 mixins(混入)就是定义了一部分公共的方法.计算属性或者钩子函数等 vue 组件中的可复用功能,然后混合进各个组件中使用.下面我们具体来看看怎么使 ...
- vue中文件上传方法
vue中文件上传方法(图片,表格) //html部分 <input type="file" id="people-export" ref="in ...
- vue中使用vue-awesome-swiper的方法(实现一屏展示多个图片,点击左右滚动一张)
vue中使用vue-awesome-swiper的方法 (awesome-swiper demo官网)[https://surmon-china.github.io/vue-awesome-swipe ...
- vue中组件之间调用方法——子组件调用父组件的方法 父组件调用子组件的方法
vue中组件之间调用方法--子组件调用父组件的方法 & 父组件调用子组件的方法 1.vue中子组件调用父组件的方法 1.1.第一种方法是直接在子组件中通过this.$parent.event来 ...
- Vue中的this.$nextTick方法的使用 [前端][Vue框架]
Vue中的this.$nextTick方法的使用 因为在vue中当组件的data中的数据发生了变化之后, 如果这个data中的数据与某个Dom元素有关, 那么这个时候这个Dom元素不会立即更新, vu ...
- 解决vue中无法取得methods方法中的return值
解决vue中无法取得methods方法中的return值 参考文章: (1)解决vue中无法取得methods方法中的return值 (2)https://www.cnblogs.com/betty- ...
- Element组件引发的Vue中mixins使用,写出高复用组件
我们都知道 Vue 采用的是一种组件化开发模式,组件在 Vue 中一个非常重要的核心概念.每个组件都是一个完整的实例,组件的创建,组件间的通讯,组件如何更好的复用,以及整个的生命周期的钩子.所以你会发 ...
最新文章
- 【Qt】ubuntu QtCreator的pro文件中使用pkg-config
- 积极拥抱.NET Core开源社区
- 文本编辑BOM标记(Byte Order Mark)
- NLP免费直播 | 两周详解BERT、知识图谱、对话生成、图卷积神经网络
- C++中的string类型转换为int类型
- Java 结构体之 JavaStruct 使用教程三 JavaStruct 数组进阶
- linux重启网络服务_vm上linux虚拟机NAT模式配置
- 在线播放器 在网页中插入MediaPlayer 兼容IE和FF的代码调试
- 谈谈运维监控那些事儿
- C4D快速入门教程——倒角
- 二进制转四进制计算机,计算机进制转换方法
- Python3爬虫中Selenium的用法详解
- 用C语言编程验证 “ 哥德巴赫猜想 ”
- 分布式系统原理(5)Quorum 机制
- 自定义插入页面标签以及实现类似通讯录的首字母搜索
- 20135337朱荟潼 Linux第二周学习总结——操作系统是如何工作的
- 详解SAN存储技术的前世今生
- PyQt5最全26 绘图之drawPoint用像素点绘制正弦曲线
- r7000p装linux双系统,联想拯救者 刃7000台式机设置u盘启动(支持uefi/bios双启动)
- python统计西游记人物名字出现次数_Python文本统计功能之西游记用字统计操作示例...