【Vue】vue中的mixin混入

news/2024/11/28 17:55:41/

Vue中的mixin混入

文章目录

  • Vue中的mixin混入
      • 简介
      • 功能
      • mixin存在的问题
      • 混入特性
      • 总结
    • 部分特性详解
      • 定义混入
      • 使用混入两种方法
      • 组件和混入对象含有同名选项时,这些选项将以恰当的方式进行“合并”,在发生冲突时以组件优先。
      • 同名生命周期钩子将合并为一个数组,因此都将被调用。另外,混入对象的钩子将在组件自身钩子之前调用。
      • 使用Mixin混入方法

简介

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

功能

可以把多个组件共用的配置提取成一个混入对象

可以理解是:Vue.mixin给我们提供了一种混入Vue实例的方法,创建了混入对象之后,我们自定义的方法或者变量可以很轻松的挂载在Vue实例上,给我们的偷懒带来方便;

mixin存在的问题

  • 变量来源不明,不利于代码的阅读;
  • 使用多个Mixin可能会造成命名冲突;
  • Mixin和组件可能会出现多对多关系,复杂度较高;

混入特性

mixin可以定义公用的变量或方法,但是mixin中的数据是不共享的,也就是每个组件中的mixin实例都是不一样的,都是单独存在的个体,不存在相互影响的;
mixin混入对象值为函数(例如:beforeCreate,created,beforeMount,mounted,beforeUpdate,updated,beforeDestroy,destroyed)的同名函数选项将会进行递归合并为数组,两个函数都会执行,只不过先执行mixin中的同名函数;
mixin混入对象值为对象(例如:props,data,methods,components)的同名对象将会进行替换,都优先执行组件内的同名对象,也就是组件内的同名对象将mixin混入对象的同名对象进行覆盖

总结

mixin: 将多个组件相同的逻辑,抽离出来复用;

使用mixin混入data: 组件 data 优先级高于 mixin混入的 data;

使用mixin混入钩子: 先执行 mixin的钩子,再执行组件里的钩子;

使用mixin混入方法: 组件 methods方法 优先级高于 mixin混入的 methods方法;

使用mixin混入自定义属性: 组件自定义属性优先级高于 mixin混入的 自定义属性;

修改优先级: 配置app.config,使用optionMergeStrategies属性修改优先级;

局部mixin: 局部Mixin和局部组件的用法类似,局部mixin在使用时,需要使用mixins声明;

全局mixin: 全局mixin类似于全局组件,默认注入每一个组件里,直接可用;

部分特性详解

定义混入

const mixin = {data(){....},methods:{....}}

使用混入两种方法

全局混入:Vue.mixin(xxx)

举个栗子

import mixin from './mixins';
Vue.mixin(mixin)

局部混入:mixins:[‘xxx’]

组件和混入对象含有同名选项时,这些选项将以恰当的方式进行“合并”,在发生冲突时以组件优先。

var mixin = {data: function () {return {message: 'hello',name: 'abc'}}
}new Vue({mixins: [mixin],data () {return {message: 'minxxxxxxx',top: 'asd'}},created () {console.log(this.$data)// log{ message: "minxxxxxxx", name: "abc", top: "def" }}
})

结论:组件 data 优先级高于 Mixin 混入的 data

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

var mixin = {created () {console.log('混入对象的钩子被调用')}
}new Vue({mixins: [mixin],created () {console.log('组件钩子被调用')}
})// => "混入对象的钩子被调用"
// => "组件钩子被调用"

结论:先执行 Mixin 的钩子,再执行组件里的钩子

使用Mixin混入方法

var mixin = {methods:{handleClick(){console.log("mixin handleClick");}},
}new Vue({mixins: [mixin],methods:{handleClick(){console.log("handleClick");}},
})// => "handleClick"

结论:组件 methods方法 优先级高于 Mixin 混入的 methods方法


http://www.ppmy.cn/news/30414.html

相关文章

世界那么大,你哪都别去了,来我带你了解CSS3 (二)

文章目录‍❤️‍🔥CSS文档流‍❤️‍🔥CSS浮动‍❤️‍🔥CSS定位‍❤️‍🔥CSS媒体查询‍❤️‍🔥CSS文档流 文档流是文档中可显示对象在排列时所占用的位置/空间。 例如:块元素自上而下摆放,内…

K_A16_001 基于STM32等单片机驱动HX711称重模块 串口与OLED0.96双显示

K_A16_001 基于STM32等单片机驱动HX711称重模块 串口与OLED0.96双显示一、资源说明二、基本参数参数引脚说明三、驱动说明对应程序:四、部分代码说明1、接线引脚定义1.1、STC89C52RCHX711称重模块1.2、STM32F103C8T6HX711称重模块五、基础知识学习与相关资料下载六、视频效果展…

Java之可变参数

目录 一.可变参数的引入 1.问题引入 2.可变参数的使用 二.可变参数的注意点 1.可变参数只能定义一个 2.可变参数必须是函数参数的最后一个​编辑 一.可变参数的引入 1.问题引入 当我们需要定义一个方法sum,接受任意个整型变量,结果返回这些整型变量的和. 我们没有学习可…

【Python入门第二十五天】Python 作用域

变量仅在创建区域内可用。这称为作用域。 局部作用域 在函数内部创建的变量属于该函数的局部作用域,并且只能在该函数内部使用。 实例 在函数内部创建的变量在该函数内部可用: def myfunc():x 100print(x)myfunc()运行实例 100函数内部的函数 如…

k8s-Kubernetes集群部署

文章目录前言一、Kubernetes简介与架构1.Kubernetes简介2.kubernetes设计架构二、Kubernetes集群部署1.集群环境初始化2.所有节点安装kubeadm3.拉取集群所需镜像3.集群初始化4.安装flannel网络插件5.扩容节点6.设置kubectl命令补齐前言 一、Kubernetes简介与架构 1.Kubernetes…

Python QT5设计UI界面教程

简介:PyQT5开发常用知识,零基础上手,需配合我之前写的博文,配置好QT设计工具和ui文件转py文件的工具。博文为:使用Python PyQt5实现一个简单的图像识别软件;页面效果如下: 1.设计菜单栏 Contai…

“基于Spring Cloud Alibaba的微服务架构实战:Nacos配置管理“

引言 Spring Cloud Alibaba 是 Spring Cloud 和 Alibaba 集团联合推出的开源微服务框架,旨在为 Java 开发者提供一种简单、易用、高效的微服务解决方案。Nacos 是一个面向云原生应用的动态服务发现、配置管理和服务管理平台,提供了服务注册与发现、配置管…

基于JSP的学生成绩管理系统

技术:Java、JSP等摘要:随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了在Myeclipse6.0环境下采用“自上而下地总体规划,自下而上地应用开发”的策略开发一个学生成绩管理信息系统的…