vue中的mixin(局部混入、全局混入)

一、mixin是什么

Mixin是面向对象程序设计语言中的类,提供了方法的实现。其他类可以访问mixin类的方法而不必成为其子类;Mixin类通常作为功能模块使用,在需要该功能时“混入”,有利于代码复用又避免了多继承的复杂

Vue中的mixin,先来看一下官方定义

mixin(混入),提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能。本质其实就是一个js对象,它可以包含我们组件中任意功能选项,如data、components、methods、created、computed等等

在Vue中我们可以局部混入跟全局混入

局部混入

定义一个 mixins.js 文件,此文件中可以混入Vue中所有的设置项,methods、computed、watch、data、生命周期函数等都可以。

// mixin.js
export const myMixin = {
  methods: {
    sharedMethod() {
      console.log('This method is shared between components.');
    }
  }
};
// MyComponent.vue
<template>
  <div>
    <button @click="sharedMethod">Click me</button>
  </div>
</template>
 
<script>
import { myMixin } from './mixin.js';
 
export default {
  mixins: [myMixin],
  // 组件自己的选项...
};
</script>

全局混入

全局混入表示混入到Vue对象中,Vue下的所有组件都会使用混入的方法,一定要注意,是所有的组件,所以,在使用全局混入的时候要确保所有的组件都会使用到。

如果在使用混入的过程中出现冲突,除生命周期钩子外,其余的都以本组件中的为主,混入的不生效;生命周期钩子产生冲突是先执行混入的声明周期钩子,再执行本组件的生命周期钩子。 

//main.js文件
import {mixin1, mixin2} from "../mixins.js"
 
Vue.mixin(mixin1)
Vue.mixin(mixin2)
//如果不想创建单独的类,也可以直接写一个配置对象
Vue.mixin({
  created: function () {
      console.log("全局混入")
    }
})

PS:全局混入常用于插件的编写,使用全局混入需要特别注意,因为它会影响到每一个组件实例(包括第三方组件)

二、使用场景

在日常的开发中,我们经常会遇到在不同的组件中经常会需要用到一些功能相同或者相似的代码(造成代码冗余),这时可以通过Vue的mixin功能将相同或者相似的代码抽取出来。

举个例子

定义一个modal弹窗组件,内部通过isShowing来控制显示

const Modal = {
  template: '#modal',
  data() {
    return {
      isShowing: false
    }
  },
  methods: {
    toggleShow() {
      this.isShowing = !this.isShowing;
    }
  }
}



定义一个tooltip提示框,内部通过isShowing来控制显示

const Tooltip = {
  template: '#tooltip',
  data() {
    return {
      isShowing: false
    }
  },
  methods: {
    toggleShow() {
      this.isShowing = !this.isShowing;
    }
  }
}



通过观察上面两个组件,发现两者的逻辑是相同,代码控制显示也是相同的,这时候mixin就派上用场了

首先抽出共同代码,编写一个mixin

const toggle = {
  data() {
    return {
      isShowing: false
    }
  },
  methods: {
    toggleShow() {
      this.isShowing = !this.isShowing;
    }
  }
}

两个组件在使用上,只需要引入mixin

const Modal = {
  template: '#modal',
  mixins: [toggle]
};
 
const Tooltip = {
  template: '#tooltip',
  mixins: [toggle]
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何在 Ubuntu 14.04 上配置 StatsD 以收集 Graphite 的任意统计数据

介绍 Graphite 是一个图形库&#xff0c;允许您以灵活和强大的方式可视化不同类型的数据。它通过其他统计收集应用程序发送给它的数据进行图形化。 在之前的指南中&#xff0c;我们讨论了如何安装和配置 Graphite 本身&#xff0c;以及如何安装和配置 collectd 以编译系统和服…

python实现视频剪辑

即刻关注&#xff0c;获取更多 实现目标 因上传某盘等文件大小限制&#xff0c;无法上传视频&#xff0c;故需要对视频进行压缩 参考资料 ffmpeg文档参考: https://ffmpeg.org/ffmpeg.html 依赖条件 已经安装好python3.11 &#xff0c;原则上更高版本也可以 安装 ffmpeg 依赖 p…

21.3K star!推荐一款可视化自动化测试/爬虫/数据采集神器!功能免费且强大!

大家好&#xff0c;我是狂师&#xff01; 在大数据时代&#xff0c;信息的获取与分析变得尤为重要。对于开发者、数据分析师乃至非技术人员来说&#xff0c;能够高效地采集网络数据并进行分析是一个强有力的工具。今天&#xff0c;我要向大家推荐的是一款功能强大、操作简单且…

线上申报开放时间!2024年阜阳市大数据企业培育认定申报条件、流程和材料

2024年阜阳市大数据企业培育认定申报条件、流程和材料&#xff0c;线上申报开放时间整理如下 一、2024年阜阳市大数据企业培育认定申报要求 &#xff08;一&#xff09;经营范围 申请认定的企业应当从事以下生产经营活动&#xff1a; 1.从事数据收集、存储、使用、加工、传输、…

HotSpot JVM 中的应用程序/动态类数据共享

0.前言 本文的目的是详细讨论 HotSpot JVM 自 JDK 1.5 以来提供的一项功能&#xff0c;该功能可以减少启动时间&#xff0c;但如果在多个 JVM 之间共享相同的类数据共享 (CDS) 存档&#xff0c;则还可以减少内存占用。 1.类数据共享 (CDS) CDS 的想法是使用特定格式将预处理…

多分辨率展开

1.,首先这个图居然给出了基和对偶基相等这个概念。我需要说明一下这个概念的来源。 1.1.,对偶基一开始是来自高等代数的线性空间&#xff0c;然后是泛函分析中的赋范线性空间的共轭空间。至于基的概念&#xff0c;赋范线性空间并没有&#xff0c;可能是因为正交需要内积来定义&…

Python基础知识(二)

&#x1f3ac; 秋野酱&#xff1a;《个人主页》 &#x1f525; 个人专栏:《Java专栏》 《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 1.输入和输出函数1.1输出函数1.2输入函数 2.常见运算符2.1赋值运算符2.2比较运算符2.3逻辑运算符2.4and逻辑与2.5or逻辑或2.6not逻…

超纯水抛光树脂MB-115的使用及装填注意事项

用前须知 01.抛光树脂是由高度纯化、转型的H型阳树脂和OH型阴树脂混合而成&#xff0c;如果装填和操作得当&#xff0c;在最初的周期中即可制备出电阻率大于18.0MΩcm和TOC小于10ppb的超纯水&#xff0c;无需化学再生。 02.树脂开封后长时间暴露在空气中会吸收二氧化碳&#…

k8s日常动手实践 ~~ pod访问 pod请求 k8s api ~ 含新版带curl的busybox镜像

前言&#xff1a; 可以使用 Kubernetes API 获取集群信息。使用 Service Account&#xff08;SA&#xff09;进行身份验证&#xff0c;可以以安全的方式访问 Kubernetes API&#xff0c;而无需在 Pod 中使用明文凭据。 以下是一个使用 Service Account 访问 Kubernetes API 获…

HAWE比例多路阀驱动放大器

HAWE比例多路阀驱动放大器是一种在工程机械和工业自动化领域中广泛使用的高精度控制元件&#xff0c;它通过电气信号来控制流体的流动方向、流量及压力等参数。多路比例阀品牌技术的核心在于高性能、低成本、智能化控制、高频响、安全性以及技术创新等方面。这些技术的发展不仅…

Web前端开发之HTML_1

第一个前端程序VS Code安装VS Code 快捷键 1. 第一个前端程序 使用记事本&#xff0c;新建一个文本文档&#xff0c;重命名为Welcome.html&#xff0c;如下图&#xff1a; 用记事本打开文档&#xff0c;内容输入如下&#xff1a; <html> <head> <t…

<计算机网络自顶向下>网络层导论

在计算机网络中&#xff0c;网络层包括数据平面和控制平面&#xff0c;它们分别负责网络数据转发和网络路由控制。以下是它们之间的区别&#xff1a; 数据平面&#xff08;Data Plane&#xff09;&#xff1a; 数据平面负责实际的数据传输和转发&#xff0c;它处理网络中的数据…

IDEA本地将镜像推送到coding制品仓库

创建制品仓库 假设仓库名称为docker 在IDEA 添加Docker 注册表 IDEA必须先安装docker插件 地址 用户名和密码就是coding的登录名和密码服务器 最好本地安装docker桌面版&#xff0c;更容易操作 测试连接成功 推送镜像到coding的docker制品仓库 选中某个镜像 鼠标右键 注册表…

金蝶云星空和旺店通·企业版单据接口对接

金蝶云星空和旺店通企业版单据接口对接 接入系统&#xff1a;旺店通企业版 慧策最先以旺店通ERP切入商家核心管理痛点——订单管理&#xff0c;之后围绕电商经营管理中的核心管理诉求&#xff0c;先后布局流量获取、会员管理、仓库管理等其他重要经营模块。慧策的产品线从旺店通…

画家-qt-surce

void GraphicView::paintEvent(QPaintEvent *pe) { QPainter painter(viewport()); painter.setRenderHint(QPainter::SmoothPixmapTransform);//升级画家 painter.drawImage(rect(),musicImage); } 分析&#xff1a; 这段代码是用于绘制图形视图的部分。 1. void GraphicV…

Hbase中二级索引与Phoenix二级索引实现

1、引入 HBase本身只提供基于行键和全表扫描的查询&#xff0c;而行键索引单一&#xff0c;对于多维度的查询困难。 所以我们引进一个二级索引的概念。二级索引的本质就是建立各列值与行键之间的映射关系 。 图解&#xff1a; 2、常见实现二级索引的方案&#xff1a; HBase…

go版本1.16.5 运行项目出现undefined: math.MaxInt报错

问题描述 go版本 go1.16.5 项目引用了 包go-sqlite3 v1.14.17 github.com/mattn/go-sqlite3 v1.14.17运行报错 # github.com/mattn/go-sqlite3 D:\GoPATH\pkg\mod\github.com\mattn\go-sqlite3v1.14.17\sqlite3_opt_serialize.go:41:26: undefined: math.MaxInt原因分析&…

离散数学之一阶逻辑基本概念与等值演算思维导图+大纲笔记(期末复习,考研,学习笔记,知识点总结)

大纲笔记 基本概念 一阶逻辑命题符号化 个体词 个体常项 个体变项 个体域 个体总域 谓词 谓词常项 谓词变项 零元谓词 特性谓词 引入规则 量词 全称量词 存在量词 一阶逻辑1公式及解释 基本概念 原子公式 谓词公式 自由变元与约束变元 自由变元 换名规则 约束变元 带入规则 闭…

强制内容在一行显示

强制内容在一行显示 .one {white-space: nowrap;overflow: hidden;text-overflow: ellipsis; /* 可选&#xff0c;当内容超出一行时&#xff0c;用省略号表示 */ }效果

构建代理IP池并自动测试可用性的爬虫实现

目录 前言 一、认识代理IP 1. 隐藏真实IP地址 2. 提高爬虫效率 二、爬取代理IP 三、测试代理IP可用性 1. 发起HTTP请求 2. 超时检测 3. 循环请求 四、构建代理IP池 五、总结 前言 随着互联网的发展&#xff0c;网络爬虫在数据采集、搜索引擎、信息监控等领域发挥着…
最新文章