热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

vue_mixin混入

目录官网基本概念什么是Mixin混入和组件的区别混入和vuex的区别mixin的优点mixin的缺点使用mixin语法mixin局部混入-mixins全局混入-Vue.mixin方




目录


      • 官网
      • 基本概念
        • 什么是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&#61;"app">
{{msg}}
</div>
</template>
<script>
import mixData from &#39;../src/mixins/mixinTest&#39;
export default {
name: &#39;App&#39;,
mixins:[ mixData ],
methods:{
}
}
</script>

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


[2]methods方法

总结

  • 在mixin中定义的方法可以直接在组件中使用&#xff0c;使用方式与直接在组件methods中定义的方法使用方式相同&#xff1b;
  • 若是方法名冲突
    • 若是组件在methods中定义了此方法&#xff0c;以组件中方法为准&#xff1b;
    • 若是混入的多个mixin中存在方法名冲突&#xff0c;后来者居上先引入的会被后引入的mixin覆盖

      // 若是mixData2与mixData存在同名方法&#xff0c;则mixData2中的方法会被覆盖
      mixins:[ mixData2, mixData ],


举例说明

(1)mixin

export default{
data () {
return{
msg:&#39;hello word&#39;,
}
},
methods:{
editMsg(value){
this.msg &#61; value
}
}
}

(2)组件中

<template>
<div id&#61;"app">
{{msg}}
<button &#64;click&#61;"editMsg(222)">去修改</button>
</div>
</template>
<script>
import mixData from &#39;../src/mixins/mixinTest&#39;
export default {
name: &#39;App&#39;,
mixins:[ mixData ],
methods:{
},

}
</script>

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


[3]生命周期函数

总结

  • mixin中的生命周期函数会和组件的生命周期函数一起合并执行
  • 合并后的执行顺序&#xff1a;
    • 只引入1个mixin:先执行mixin中生命周期函数中的代码&#xff0c;然后在执行组件内部生命周期函数的代码;
    • 引入多个mixin:先引入的mixin的生命周期函数先执行&#xff0c;最后执行组件中的生命周期函数

      // 先执行mixData2的生命周期函数再执行mixData的生命周期函数
      mixins:[ mixData2, mixData ],


举例说明

(1) mixin

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

(2)组件中

<template>
<div id&#61;"app">
{{msg}}
</div>
</template>
<script>
import mixData from &#39;../src/mixins/mixinTest&#39;
export default {
name: &#39;App&#39;,
mixins:[ mixData ],
methods:{
},
created () {
console.log(&#39;我是父组件的created事件&#39;)
},
mounted () {
console.log(&#39;我是父组件的mounted事件&#39;)
}
}
</script>

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


问题&#xff1a;一个组件中修改了mixin中的数据&#xff0c;会对其他引用了mixin的组件造成影响吗&#xff1f;

不会&#xff01;
原因&#xff1a;不同组件中的mixin是相互独立的







推荐阅读
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • switch语句的一些用法及注意事项
    本文介绍了使用switch语句时的一些用法和注意事项,包括如何实现"fall through"、default语句的作用、在case语句中定义变量时可能出现的问题以及解决方法。同时也提到了C#严格控制switch分支不允许贯穿的规定。通过本文的介绍,读者可以更好地理解和使用switch语句。 ... [详细]
  • 本文介绍了指针的概念以及在函数调用时使用指针作为参数的情况。指针存放的是变量的地址,通过指针可以修改指针所指的变量的值。然而,如果想要修改指针的指向,就需要使用指针的引用。文章还通过一个简单的示例代码解释了指针的引用的使用方法,并思考了在修改指针的指向后,取指针的输出结果。 ... [详细]
author-avatar
学生联盟v
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有