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

news2024/12/27 12:22:20

文章目录

      • (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 = size
      this.searchData()
    },
    handleCurrentChange(page) {
      this.pageNo = page
      this.searchData()
    },
    handleSearchData() {
      this.pageNo = 1
      this.searchData()
    }
  }
}

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

import tableMixin from './tableMixin'

export default {
  ...//引入mixins
  mixins: [tableMixin],
  methods: {
    searchData() {
      ...
    }
  }
}

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

(6)总结

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

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

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

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

相关文章

Session | 基于Session改造oa项目的登录功能

目录 一&#xff1a;总结域对象 二&#xff1a;基于Session改造oa项目的登录功能 三&#xff1a;oa项目的安全退出系统 一&#xff1a;总结域对象 &#xff08;1&#xff09;request&#xff08;对应的类名&#xff1a;HttpServletRequest&#xff09; 请求域&#xff08;请…

【机器学习】机器学习30个笔试题

机器学习试题 在回归模型中&#xff0c;下列哪一项在权衡欠拟合&#xff08;under-fitting&#xff09;和过拟合&#xff08;over-fitting&#xff09;中影响最大&#xff1f;&#xff08;A&#xff09; A. 多项式阶数 B. 更新权重 w 时&#xff0c;使用的是矩阵求逆还是梯度下…

几款超好用的内网穿透神器,总有一款适合你!

本文以渗透的视角&#xff0c;总结几种个人常用的内网穿透&#xff0c;内网代理工具&#xff0c;介绍其简单原理和使用方法。 0x01 nps-npc 1.1 简介 nps是一款轻量级、高性能、功能强大的内网穿透代理服务器。目前支持tcp、udp流量转发&#xff0c;可支持任何tcp、udp上层协…

前端js长整型精度丢失处理

一、现象 在分页查询时&#xff0c;服务端会将返回的对象进行json序列化&#xff0c;转换为json格式的数据&#xff0c;而用户的ID是一个Long类型的数据&#xff0c;而且是一个长度为 19 位的长整型数据&#xff0c; 该数据返回给前端是没有问题的。 问题实际上&#xff0c; …

适用于Unity的 Google Cardboard XR Plugin快速入门

本指南向您展示如何使用 Google Cardboard XR Plugin for Unity 创建您自己的虚拟现实 (VR) 体验。 您可以使用 Cardboard SDK 将移动设备变成 VR 平台。移动设备可以显示具有立体渲染的 3D 场景&#xff0c;跟踪头部运动并对其做出反应&#xff0c;并通过检测用户何时按下查看…

MySQL篇【5】——约束

目录表的约束空属性默认值列描述zerofill主键自增长唯一键外键如何理解外键约束在数据库的实际操作中难免会有一些操作不规范的地方&#xff0c;比方说在一张学生成绩表中&#xff0c;成绩的最高值为100&#xff0c;那么如果在这张表中如果出现了超过100分的成绩那显然是不合理…

单片机定时器

定时器 STM32有11个定时器&#xff0c;2个高级定时器、4个通用定时器&#xff0c;2个基本定时器&#xff0c;1个系统嘀嗒定时器&#xff08;systick&#xff09;&#xff0c;2个看门狗定时器。 定时器计算&#xff1a; Tout((per)psc)/Tclk t&#xff08;f/pre&#xff09;per…

Spire.Office for Java 7.12.2 迎接新年/圣诞!!!

谷歌找破解版Spire.Office for Java is a combination of Enterprise-Level Office Java APIs offered by E-iceblue. It includes Spire.Doc for Java, Spire.XLS for Java, Spire.Presentation for Java, Spire.PDF for Java and Spire.Barcode for Java.内容及配图来自网络 …

cv2.findContours() 图像的轮廓

cv2.findContours(image, mode, method, contoursNone, hierarchyNone, offsetNone)参数&#xff1a; image&#xff1a;寻找轮廓的图像&#xff0c;注意输入的图片必须为二值图片。若输入的图片为彩色图片&#xff0c;必须先进行灰度化和二值化 mode&#xff1a;轮廓的检索模…

高分子PEG: mPEG-Phosphate MV 1K 2K 3.4K 5K 10K 20K 特点分享

【中文名称】甲氧基-聚乙二醇-磷酸盐 【英文名称】 mPEG-Phosphate 【结 构 式】 【CAS号】N/A 【分子式】N/A 【MV】1000、2000、3400、5000、10000、20000 【基团部分】Phosphate PEG&#xff0c;磷酸盐PEG 【纯度标准】95% 【包装规格】1g&#xff0c;5g&#xff0c;10g&…

java基于Springboot的影视管理系统-计算机毕业设计

项目介绍 影城管理系统的主要使用者分为管理员和用户&#xff0c;实现功能包括管理员&#xff1a;首页、个人中心、用户管理、电影类型管理、放映厅管理、电影信息管理、购票统计管理、系统管理、订单管理&#xff0c;用户前台&#xff1a;首页、电影信息、电影资讯、个人中心…

acwing-Django项目——前期工作+前端js css

文章目录1.租服务器配置环境 配置docker环境创建工作用户ljh并赋予sudo权限配置免密登录方式给server1装环境装docker将AC Terminal中的/var/lib/acwing/docker/images/docker_lesson_1_0.tar镜像上传到租好的服务器中将镜像加载到本地配置docker环境创建项目配置git运行一下dj…

C++中前置操作性能一定优于后置操作?

后置操作和前置操作&#xff0c;一个会产生临时变量&#xff0c;一个不会产生临时变量&#xff0c;其原因是&#xff1a;前置操作遵循的规则是change-then-use&#xff0c;而后置操作遵循的规则是use-then-change。正因为后置操作的use-then-change原则&#xff0c;使得编译器在…

Python如何pip批量安装指定包 - 最简单方法

文章目录背景解决办法1. 制作requirements.txt文件2. 将requirements.txt传到需要部署的电脑上3. 批量安装包背景 有很多台服务器需要配置, 简单说也就是公司给我配备了3台Windows, 我需要配置Python环境并安装7个包, 如果按照常规的pip install我至少得安装3x721次, 并且得一…

data shift--学习笔记

一般假设训练集和测试集是独立同分布的&#xff0c;才能保证在训练集上表现良好的模型同样适用于测试集。当训练集和测试集不同分布时&#xff0c;就发生了dataset shiftdata shift类型&#xff1a; 协变量偏移&#xff08;covariate shift&#xff09;&#xff1a; 协变量&…

简约而不简单!分布式锁入门级实现主动续期-自省

一、背景 一个分布式锁应具备的功能特点中有避免死锁这一条&#xff1a; 如果某个客户端获得锁之后处理时间超过最大约定时间&#xff0c;或者持锁期间内发生了故障导致无法主动释放锁&#xff0c;其持有的锁也能够被其他机制正确释放&#xff0c;并保证后续其它客户端也能加锁…

Unity 3D 刚体(Rigidbody)|| Unity 3D 刚体实践案例

Unity 3D 中的 Rigidbody 可以为游戏对象赋予物理特性&#xff0c;使游戏对象在物理系统的控制下接受推力与扭力&#xff0c;从而实现现实世界中的物理学现象。 我们通常把在外力作用下&#xff0c;物体的形状和大小&#xff08;尺寸&#xff09;保持不变&#xff0c;而且内部…

Vue3 —— Pinia 的学习指南以及案例分享

文章目录 前言一、什么是pinia?二、为什么要使用Pinia?三、Pinia对比Vuex四、具体使用方法 1.安装2.创建一个store五、state 1.访问state2.重置状态3.修改state4.批量修改state5.替换state六、getters 1.访问getters2.getters传参3.写为普通函数可调用this4.访问其他的store中…

可见光热红外图像融合算法设计

本设计方式中对于多源图像融合算法采用以下三个步骤进行&#xff1a; 多源图像目标特征提取&#xff1b;多源图像配准&#xff1b;多源图像融合。 1&#xff0e;多源图像目标特征提取 多源图像的目标特征提取中&#xff0c;优先对目标图像进行预处理&#xff0c;对于可见光图像…

品牌势能铸就非凡经典,凯里亚德与郁锦香酒店亮相品牌沙龙会烟台站

近日&#xff0c;汇聚国内众多投资人的锦江酒店(中国区)品牌沙龙会烟台站顺利举行。本次沙龙活动以“齐风鲁韵 锦绘未来”为主题&#xff0c;锦江酒店(中国区)旗下众多优秀品牌共同亮相。凯里亚德酒店与郁锦香酒店在本次活动中向投资人展示了在如今复杂多变的酒店市场中如何以强…