vue_mixin混入

news2024/11/15 13:21:42

目录

      • 官网
      • 基本概念
        • 什么是Mixin
        • 混入和组件的区别
        • 混入和vuex的区别
        • mixin的优点
        • mixin的缺点
      • 使用mixin
        • 语法
          • mixin
          • 局部混入-mixins
          • 全局混入-Vue.mixin方法(不推荐)
        • mixin与组件合并逻辑
          • [1]data数据
            • 总结
            • 举例说明
          • [2]methods方法
            • 总结
            • 举例说明
          • [3]生命周期函数
            • 总结
            • 举例说明
          • 问题:一个组件中修改了mixin中的数据,会对其他引用了mixin的组件造成影响吗?

官网

vue_混入

基本概念

什么是Mixin

Mixin称为混入。其实Mixin不是Vue专属的,可以说它是一种思想,在很多开发框架中都实现了Mixin(混入),我们这里主要讲解的是Vue中的Mixin.

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

个人理解:混入就是将组件的公共逻辑或者配置提取出来,哪个组件需要用到时,直接将提取的这部分混入到组件内部即可

混入和组件的区别

  • 组件是将页面进行模块化,将某个经常使用的盒子的 html+css+js提取成公共组件,主要提取的是html+css;
  • 混入提取的是公共逻辑或配置,主要提取的是js;

混入和vuex的区别

  • Vuex公共状态管理,如果在一个组件中更改了Vuex中的某个数据,那么其它所有引用了Vuex中该数据的组件也会跟着变化;
  • Mixin中的数据和方法都是独立的,组件之间使用后是互不影响的;

mixin的优点

  • 提高代码复用性
  • 无需传递状态
  • 维护方便,只需要修改一个地方即可

mixin的缺点

  • 命名冲突
  • 滥用的话后期很难维护
  • 不好追溯源,排查问题稍显麻烦
  • 不能轻易的重复代码

使用mixin

语法

mixin

mixin本质是一个对象,只不过这个对象里面可以包含Vue组件中的一些常见配置,如data、methods、生命周期、watch、computed、filter等等。

{
 data(){
   return{
     // 数据
   }
 },
 methods:{
   // 方法
 }
}
局部混入-mixins

mixins 选项接收一个混入对象的数组。这些混入对象可以像正常的实例对象一样包含实例选项,这些选项将会被合并到最终的选项中,用于局部混入。

  mixins:[mixin]

配置步骤

  • (1)编写mixin
  • (2)在使用的组件引入,使用mixins配置
全局混入-Vue.mixin方法(不推荐)

Vue.mixin方法接受的参数是一个混入对象,通过此方法将该混入进行全局注册,这样混入中的逻辑可以在任何组件中使用。

Vue.mixin(mixin)

配置步骤

  • (1)编写mixin
  • (2)在main.js引入,使用Vue.mixin配置

mixin与组件合并逻辑

[1]data数据
总结
  • 在mixin中定义的变量可以直接在组件中使用,使用方式与直接在组件data中定义的变量使用方式相同;
  • 若是变量名冲突
    • 若是组件在data中定义了此变量,以组件中变量值为准;
    • 若是混入的多个mixin中存在变量冲突,后来者居上先引入的会被后引入的mixin覆盖
      // 若是mixData2与mixData存在同名变量,则mixData2中的变量会被覆盖
       mixins:[ mixData2, mixData ],
      
举例说明

(1)定义一个混入(位置不固定)

export default{
  data () {
    return{
      msg:'hello word',
    }
  }
}

(2)在组件中使用

<template>
  <div id="app">
    {{msg}}
  </div>
</template>

<script>
import mixData from '../src/mixins/mixinTest'

export default {
  name: 'App',
  mixins:[ mixData ],
  methods:{
  }
}
</script>

(3)执行结果
在页面上显示hello word

[2]methods方法
总结
  • 在mixin中定义的方法可以直接在组件中使用,使用方式与直接在组件methods中定义的方法使用方式相同;
  • 若是方法名冲突
    • 若是组件在methods中定义了此方法,以组件中方法为准;
    • 若是混入的多个mixin中存在方法名冲突,后来者居上先引入的会被后引入的mixin覆盖
      // 若是mixData2与mixData存在同名方法,则mixData2中的方法会被覆盖
       mixins:[ mixData2, mixData ],
      
举例说明

(1)mixin

export default{
  data () {
    return{
      msg:'hello word',
    }
  },
  methods:{
    editMsg(value){
      this.msg = value
    }
  }
}

(2)组件中

<template>
  <div id="app">
    {{msg}}
    <button @click="editMsg(222)">去修改</button>
  </div>
</template>

<script>
import mixData from '../src/mixins/mixinTest'

export default {
  name: 'App',
  mixins:[ mixData ],
  methods:{
  },
 
}
</script>

(3)执行结果
最初页面显示hello word ,当点击去修改按钮时页面内容变为222

[3]生命周期函数
总结
  • mixin中的生命周期函数会和组件的生命周期函数一起合并执行
  • 合并后的执行顺序:
    • 只引入1个mixin:先执行mixin中生命周期函数中的代码,然后在执行组件内部生命周期函数的代码;
    • 引入多个mixin:先引入的mixin的生命周期函数先执行,最后执行组件中的生命周期函数
       // 先执行mixData2的生命周期函数再执行mixData的生命周期函数
      mixins:[ mixData2, mixData ],
      
举例说明

(1) mixin

export default{
 data () {
   return{
     msg:'hello word',
   }
 },
 created () {
   console.log('我是子组件的created事件')
 },
 mounted () {
   console.log('我是子组件的mounted事件')
 }
}

(2)组件中

<template>
  <div id="app">
    {{msg}}
  </div>
</template>

<script>
import mixData from '../src/mixins/mixinTest'

export default {
  name: 'App',
  mixins:[ mixData ],
  methods:{
  },
  created () {
    console.log('我是父组件的created事件')
  },
  mounted () {
    console.log('我是父组件的mounted事件')
  }
}
</script>

(3)执行结果
在这里插入图片描述

问题:一个组件中修改了mixin中的数据,会对其他引用了mixin的组件造成影响吗?

不会!
原因:不同组件中的mixin是相互独立的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/12483.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux 进程信号

目录 一.信号 1.介绍 2.信号概念 3.查看系统定义的信号列表 4.信号处理的方式 二.信号产生前 1.用户层产生信号的方式 三.产生信号 1.通过按键产生信号 2.调用系统函数向进程发信号 &#xff08;1&#xff09;kill &#xff08;2&#xff09;raise &#xff08;…

大学生WEB前端静态网页——旅游介绍35页 响应式,

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 游景点介绍 | 旅游风景区 | 家乡介绍 | 等网站的设计与制作| HTML期末大学生网页设计作业&#xff0c;Web大学生网页 HTML&#xff1a;结构 CSS&…

Android 高通 Launcher3 添加桌面快捷方式

1、最近接到产测一个需求&#xff0c;需要在首页WorkSpace添加产测apk快捷方式&#xff0c;于是乎我去查看了一下Android12的源码&#xff0c;包名/build3/zm/Em_TK1080/EM_TK1080_prj/EM_TK1080_prj/qssi12/packages/apps/Launcher3/res/xml 主要修改文件 default_workspace…

TCP程序设计基础

TCP网络程序设计是指用Socket类编写通信程序。利用TCP协议进行通信的两个应用程序是有主次之分的&#xff0c;一个称为服务器程序&#xff0c;另一个称为客户机程序。两者的功能和编写方法不大一样。服务器端与客户端的交互过程如图所示&#xff1a; 1. InetAddress类 java.…

用 Kafka + DolphinDB 实时计算K线

Kafka 是一个高吞吐量的分布式消息中间件&#xff0c;可用于海量消息的发布和订阅。 当面对大量的数据写入时&#xff0c;以消息中间件接收数据&#xff0c;然后再批量写入到时序数据库中&#xff0c;这样可以将消息中间件的高并发能力和时序数据库的高吞吐量联合起来&#xf…

关于报表打印

1 分页策略 分页与打印时密切相关的&#xff0c;皕杰报表提供了四种分页策略&#xff0c;即按纸张大小分页、按数据行数分页、按数据列数分页、用户自定义分页和不分页。分页由2个因素来控制&#xff0c;一个每个页面的大小&#xff0c;另外一个是分页顺序&#xff08;打印顺序…

如何将抓取下来的unicode字符串转换为中文

如果抓取的数据是json数据&#xff0c;那么直接将抓取的数据用json格式输出出来就行了。如下: response requests.get(url, headersheaders).json()那么大家遇到如下的unicode字符串的是如何解决的呢&#xff1f;如下图所示&#xff1a; 相信大家遇到这种一定会抓狂吧&#…

一种改进Harris算子的角点特征检测研究-含Matlab代码

⭕⭕⭕⭕ 目 录 ⭕⭕⭕⭕✅ 一、引言✅二、Harris角点检测算法✅三、角点检测实验验证✅四、参考文献✅五、Matlab代码获取✅ 一、引言 将图像中灰度变化剧烈或者在图像边界上曲率变化较大的点称为角点。角点检测对于工件图像的特征点定位有着重要作用&#xff0c;在进行工件的…

MySQL高级学习笔记(一)

文章目录MySQL高级学习笔记(一)1.索引1.1索引概述1.2索引优势劣势1.3索引结构1.3.1BTREE 结构1.3.2BTREE 结构1.3.3MySQL中的BTree1.4索引分类1.5索引语法1.5.1 创建索引1.5.2 查看索引1.5.3 删除索引1.5.4 ALTER命令1.6 索引设计原则2.视图概述2.1创建或者修改视图2.2查看视图…

【python3】5.正则表达式

本学习内容总结于莫烦python:5.正则表达式 https://mofanpy.com/tutorials/python-basic/interactive-python/regex5.正则表达式 本章较为重要&#xff0c;单独拿出来成章了 正则表达式是一个特殊的字符序列&#xff0c;它能帮助你方便的检查一个字符串是否与某种模式匹配。 …

【数据结构】栈和队列的实现(C语言)

前言 栈和队列都是重要的线性结构&#xff0c;即在使用层面上收到限制而发挥特殊作用的线性表。掌握这两种结构在不同情景下亦会发挥重要作用。 栈 定义 栈保持着后进先出的原则&#xff0c;正因如此在插入数据的时候要求只能从一段插入&#xff0c;称为栈顶&#xff1b;相反另…

Arduino与Proteus仿真实例-电子相册仿真

电子相册仿真 本次实例将仿真如何从SD卡读取BMP格式图像并在ILI9341驱动器的LCD显示屏上显示。 1、仿真电路原理图 在仿真电路原理图中,SD卡通过SPI方式连接,ILI9341 LCD显示屏也是通过SPI方式连接。SD卡的CS引脚连接Arduino Mega2560的SS引脚(Pin10),显示屏的CS引脚连接…

竞赛——【蓝桥杯】2022年11月第十四届蓝桥杯模拟赛第一期Java

1、二进制位数 问题描述 十进制整数 2 在十进制中是 1 位数&#xff0c;在二进制中对应 10 &#xff0c;是 2 位数。 十进制整数 22 在十进制中是 2 位数&#xff0c;在二进制中对应 10110 &#xff0c;是 5 位数。 请问十进制整数 2022 在二进制中是几位数&#xff1f; 答案…

数据管理技术的发展经历了哪三个阶段

数据管理技术是指对数据进行分类、组织、编码、查询和维护&#xff0c;它是数据处理的中心问题&#xff1b; 随着计算机技术的不断发展&#xff0c;在应用需求的推动下&#xff0c;在计算机硬件、软件发展的基础上数据管理技术经历了人工管理、文件管理、数据库管理3个阶段。每…

CircRNA+代谢组如何冲击22分高分文章?

发表期刊&#xff1a;Cell Metabolism 影响因子&#xff1a;22.415 发表时间&#xff1a;2019年5月30日 合作单位&#xff1a;中国科学技术大学 Biotree协助客户中国科学技术大学吴缅教授和安徽医科大学胡汪来教授及其研究团队在国际顶尖期刊《Cell Metabolism》上发表名为…

跑通yolox-s官方源码(可与yolov5s做对比试验)

目录&#xff08;一&#xff09;一些参考链接&#xff08;二&#xff09;YOLOX训练自己的数据集&#xff0c;修改相应代码0. 自己的数据集文件夹排布1. 修改类别标签和数量1.1 修改类别标签 yolox/data/datasets/voc_classes.py1.2 修改类别数量 exps/example/yolox_voc/yolox_…

Quartus 实例应用(2)——创建设计工程

Quartus II 简易教程一、概念回顾二、创建设计工程2.1 创建工程2.2 新建HDL文件三、编译工程四、下载一、概念回顾 什么是综合&#xff1f;什么是设计&#xff1f; 答&#xff1a;综合就是编译&#xff0c;设计就是布局布线。 二、创建设计工程 2.1 创建工程 打开Quartus I…

用vuex对token/refresh_token 进行管理以及处理token过期问题

这里介绍对token的处理 问题1&#xff1a;token数据或者其他数据&#xff0c;存在vuex仓库中&#xff0c;刷新会丢失状态 。 问题2&#xff1a;数据只存在本地&#xff0c;数据变化了&#xff0c;相关的视图并不会更新。 Vuex 容器中的数据只是为了方便在其他任何地方能方便的获…

【EC200U】 基站定位

EC200U 基站定位什么是基站基站定位cellLocator - 基站定位调用获取坐标token 秘钥申请运行测试我们之前玩了GPS了【EC200U】GPS定位 GPS 精度高&#xff0c;但比较费电&#xff0c;首次搜索卫星定位时间比较长&#xff0c;当卫星信号覆盖不好&#xff0c;比如室内&#xff0c;…

gdb-dashboard的简单使用

问题描述 众所周知&#xff0c;随着IDE的普及&#xff0c;越来越多的人不习惯命令行调试&#xff0c;但是Linux开发又绕不开GDB&#xff0c;所以有大佬开发了程序用来显示常见的一些调试参数&#xff0c;gdb-dashboard是比较热门的程序之一。附链接。 使用参考 神仙GDB调试工…