文章目录

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

(1)mixin基础

官网解释(Vue2.x):

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

如何理解mixins?我们可以将mixins理解成一个数组,数组中有单或多个mixin,mixin的本质就是一个JS对象,它可以有data、created、methods等等vue实例中拥有的所有属性,甚至可以在mixins中再次嵌套mixins。

(2)mixin特点

1.选项合并

官网解释(Vue2.x)

当组件和混入对象含有同名选项时,这些选项将以恰当的方式进行‘合并’。
比如,数据对象在内部会进行递归合并,并在发生冲突时以组件数据优先。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>学习mixins的简单使用</title><script type="text/javascript" src="../js/vue.js"></script>
</head><body><div class="my-app">{{message}}</div><script type="text/javascript">const myMixin = {data() {return {message: 'this is mixin message'}},created() {console.log('mixin created')}}new Vue({el: ".my-app",mixins: [myMixin],data() {return {message: '简单的vue'}},created() {console.log(this.message)}})</script>
</body></html>

界面:
mixins与Vue instance合并时,会将created等钩子函数合并成数组,mixins的钩子优先调用,当data、methods对象健值冲突时,以组件优先

同名钩子函数将合并为一个数组,因此都将被调用。另外,混入对象的钩子将在组件自身钩子之前调用。

值为对象的选项,例如 methods、components 和 directives,将被合并为同一个对象。两个对象键名冲突时,取组件对象的键值对。

2.方法和参数在各组件中不共享

简述:对于一个混合对象而言,如果在不同的组件中(以组件1和组件2为例)使用数据,如果组件1对mixin中的值改变,不会影响组件2中引用的mixin的data。
例子:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>学习mixins的简单使用(1)</title><script type="text/javascript" src="../js/vue.js"></script>
</head><body><div class="my-app">{{message}}</div><div class="my-app1">{{message}}</div><script type="text/javascript">const myMixin = {data() {return {message: 'this is mixin message',age: '18',}},created() {console.log('mixin created')}}new Vue({el: ".my-app",mixins: [myMixin],data() {return {message: '简单的vue'}},created() {this.age++;console.log('第一次引用mixin——————' + this.age)//19}})new Vue({el: ".my-app1",mixins: [myMixin],data() {return {message: '简单的vue'}},created() {console.log(this.message)console.log('第二次引用mixin——————' + this.age)//18}})</script>
</body>
</html>

(3)mixin与vuex的区别

vuex:
状态管理
里面定义的变量在每个组件中均可以进行使用和修改,在任一组件中修改此变量的值之后,其他组件中此变量的值也会随之改变。

mixins:
可以定义共用的变量
在每个组件中使用,引入组件之后,各个变量是相互独立的,值的修改在组件中不会相互影响

(4)mixin与公共组件的区别

组件 :在父组件中引入组件,相当于在父组件中给出独立的一片空间来供子组件使用,父子组件中根据props和$emit来互相传值,实际上两者是相互独立的

mixins:在引入组件之后与组件中的对象与方法进行合并,相当于扩展了父组件中的对象和方法,形成了一个新的组件。

(5)项目实践

在vue项目中使用element-ui时,比如在使用Table表格的时候,免不了申明tableData、total、pageSize等一些Table表格、Pagination分页需要的参数。

可以将重复的data和methods写入一个tableMixin中。

export default {data() {return {total: 0,pageNo: 1,pageSize: 10,tableData: [],loading: false}},created() {this.searchData()},methods: {// 预申明,防止报错searchData() {},handleSizeChange(size) {this.pageSize = sizethis.searchData()},handleCurrentChange(page) {this.pageNo = pagethis.searchData()},handleSearchData() {this.pageNo = 1this.searchData()}}
}

当需要的时候直接引入即可

import tableMixin from './tableMixin'export default {...//引入mixinsmixins: [tableMixin],methods: {searchData() {...}}
}

我们在组件内会重新申明serchData方法,类似这种methods对象形式的key,如果key相同,组件内的key会覆盖tableMixin中的key。
当然我们还可以在mixins嵌套mixins。

(6)总结

注意一下 vue 中 mixins 的优先级,component > mixins > extends。

我们暂且将 mixins 称作是组件模块化,灵活运用组件模块化,可以将组件内的重复代码提取出来,实现代码复用,也使我们的代码更加清晰,效率也大大提高。

【Vue】Vue中mixins的使用方法及实际项目应用详解相关推荐

  1. React中ref的使用方法和使用场景(详解)

    摘要 不管在Vue中还是React,如果我们想使用一个元素的DOM,不需要通过JS中操纵DOM的方法,它们提供了一个专属的API就是ref. 而Vue中的ref可能比较简单,这一篇主要讲一下如何在Re ...

  2. vue中mixins的使用方法和注意地方

    一.什么是Mixins? mixins(混入),官方的描述是一种分发 Vue 组件中可复用功能的非常灵活的方式,mixins是一个js对象,它可以包含我们组件中script项中的任意功能选项,如dat ...

  3. vue中mixins的使用方法

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

  4. vue划入划出事件_基于vue中对鼠标划过事件的处理方式详解

    鼠标事件进行监听 需求中,在一个table(组件)表中,对于其中一列(该列为图片列),当鼠标划过该列的某个单元格子(图片)时,需要展示出该单元格子对应的遮罩层 翻阅了一些博客,发现好多都提到了mous ...

  5. java8 方法引用详解_Java8中如何通过方法引用获取属性名详解

    前言 在我们开发过程中常常有一个需求,就是要知道实体类中Getter方法对应的属性名称(Field Name),例如实体类属性到数据库字段的映射,我们常常是硬编码指定 属性名,这种硬编码有两个缺点. ...

  6. python中docx模块的使用_python使用docx模块读写docx文件的方法与docx模块常用方法详解...

    一,docx模块 Python可以利用python-docx模块处理word文档,处理方式是面向对象的.也就是说python-docx模块会把word文档,文档中的段落.文本.字体等都看做对象,对对象 ...

  7. Java中JSON字符串与java对象的互换实例详解

    这篇文章主要介绍了在java中,JSON字符串与java对象的相互转换实例详解,非常不错,具有参考借鉴价值,需要的朋友可以参考下 在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JS ...

  8. python中怎么计数_浅谈python中统计计数的几种方法和Counter详解

    1) 使用字典dict() 循环遍历出一个可迭代对象中的元素,如果字典没有该元素,那么就让该元素作为字典的键,并将该键赋值为1,如果存在就将该元素对应的值加1. lists = ['a','a','b ...

  9. Java中创建String的两道面试题及详解

    转载自 Java中创建String的两道面试题及详解 我们知道创建一个String类型的变量一般有以下两种方法: String str1 = "abcd";String str2 ...

最新文章

  1. SQL数据定义、查询、更新+空值的处理 实践学习报告
  2. yum update不升级内核方法
  3. docker入门及安装
  4. 数人云CEO王璞:容器正成为软件交付的标准
  5. qchart能绘制三维_通图GIS | 用多种体展示方案适配复杂三维场景分析、表达
  6. calc(~,mac电脑set-cookies要域名和请求域名相同
  7. Masonry的使用
  8. windows高精度计数器
  9. 微信WAP H5支付功能实现
  10. 通用24CXXX读写程序(GCC),兼容24C系列存储器(24C01到24C1024),支持跨器件跨页读写,支持连续
  11. GB/T 7714, MLA ,APA这几种参考文献格式
  12. python语句中print(type(1j))_Python语句 print(type(1/2))的输出结果是:______
  13. 给出一个不多于5位的整数,要求 1、求出它是几位数 2、分别输出每一位数字 3、按逆序输出各位数字,例如原数为321,应输出123。
  14. 计算机里面怎么建新的文档,【2人回答】怎样在电脑新建中添加Word文档?-3D溜溜网...
  15. JSONObject.parseObject()
  16. PAT甲级刷题记录-(AcWing)-(Day06树 8题)
  17. 如何删除鼠标右键的显示的快捷键或功能?
  18. 深入HQL学习以及HQL和SQL的区别
  19. Alpha事后诸葛(团队)
  20. 软件技术共享社区正式上线

热门文章

  1. LEA指令与MOV指令区别
  2. 网易 七鱼 面试 java_reactJs微信端接入网易七鱼客服
  3. mysql start with connect by_MYSQL实现Oracle的Start with…Connect By递归树查询
  4. matlab的常量和变量运算符
  5. 弘辽科技:一件代发什么商品最容易赚钱?怎么做优化?
  6. 服务被人当肉鸡了,叫一路赚钱 xig
  7. 最全maven archetype 配置!
  8. 离子引擎驱动的无声飞机原型成功试飞;华为测试谷歌 Fuchsia OS
  9. xampp安装出现it seems you have an antivirus running
  10. VC++钩子使用之全局键盘钩子