程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • Vue2

    • Vue简介
    • Vue 基础使用
    • Vue的基础指令
    • 过滤器(Filters)
    • 侦听器(Watch)
    • 计算属性(computed)
    • vue-cli
    • vue.config.js配置
    • Vue组件
    • 生命周期和数据共享
    • Vue 组件实例与数据代理 (this)
    • $refs 引用
    • 动态组件
    • 插槽 (Slots)
    • 混入 (Mixin)
      • 混入 (Mixin)
      • 1. 定义混合
      • 2. 使用混入
        • 配置全局混入
        • 配置局部混入
      • 3. 原则和注意事项
    • 自定义指令 (directives)
    • 插件 (Plugins)
    • 初识Vue-router
    • Vue-router的常见用法
  • Vue3

  • vue3 + TS 项目集成

  • Vue全家桶
  • Vue2
scholar
2024-08-01
目录

混入 (Mixin)

# 混入 (Mixin)

混入(Mixin)是 Vue 提供的一种机制,用于将多个组件共用的配置提取成一个混入对象,从而实现配置的复用。

功能

混入可以将多个组件共用的配置(如数据、方法、生命周期钩子等)提取成一个混入对象,实现配置的复用。

# 1. 定义混合

首先,在一个单独的 JavaScript 文件中定义一个混入对象,包含需要复用的配置,并导出这个混入对象。

// myMixin.js
export const myMixin = {
  data() {
    return {
      sharedData: '这是混入的数据' // 共享的数据
    };
  },
  methods: {
    sharedMethod() {
      console.log('这是混入的方法'); // 共享的方法
    }
  },
  created() {
    console.log('这是混入的 created 钩子'); // 共享的生命周期钩子
  }
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 2. 使用混入

混入可以全局使用或局部使用。

# 配置全局混入

在 main.js 文件中引入混入文件中的配置并全局注册。全局混入会使得所有的 Vue 实例(包括根实例和所有子组件)都具有混入的配置。




 

 
 





// main.js
import Vue from 'vue';
import App from './App.vue';
import { myMixin } from './myMixin';

// 全局混入:所有组件都会有 sharedData 和 sharedMethod
Vue.mixin(myMixin);

new Vue({
  render: h => h(App),
}).$mount('#app');
1
2
3
4
5
6
7
8
9
10
11

使用全局混入后的组件示例:



 
 
 
 





















<template>
  <div>
    <!-- 直接使用混入的数据 -->
    <h1>{{ sharedData }}</h1>
    <!-- 直接调用混入的方法 -->
    <button @click="sharedMethod">点击调用混入方法</button>
  </div>
</template>

<script>
export default {
  name: 'ExampleComponent',
  data() {
    return {
      localData: '这是组件自己的数据' // 组件自己的数据
    };
  },
  created() {
    console.log('这是组件自己的 created 钩子');
  }
};
</script>

<style>
/* 这里可以添加一些样式 */
</style>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

# 配置局部混入

在组件配置项中引入混入对象,并在 mixins 数组中使用。局部混入只会影响使用该混入的组件。



 
 
 
 






 



 















<template>
  <div>
    <!-- 直接使用混入的数据 -->
    <h1>{{ sharedData }}</h1>
    <!-- 直接调用混入的方法 -->
    <button @click="sharedMethod">点击调用混入方法</button>
    <!-- 使用组件自己的数据 -->
    <p>{{ localData }}</p>
  </div>
</template>

<script>
import { myMixin } from './myMixin';

export default {
  name: 'ExampleComponent',
  mixins: [myMixin], // 局部混入:只有这个组件会有 sharedData 和 sharedMethod
  data() {
    return {
      localData: '这是组件自己的数据' // 组件自己的数据
    };
  },
  created() {
    console.log('这是组件自己的 created 钩子');
  }
};
</script>

<style>
/* 这里可以添加一些样式 */
</style>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

# 3. 原则和注意事项

  • 不破坏原有代码:混入不会破坏组件原有的代码,而是将混入对象中的配置合并到组件中。
  • 全局混入影响范围大:全局混入会影响所有的 Vue 实例和组件,因此应谨慎使用,以避免意外影响。
  • 生命周期钩子合并:当组件和混入对象中有同一个生命周期钩子时,所有的钩子函数都会被调用。混入对象中的钩子先执行,然后是组件自己的钩子。
  • 混入方法和属性的调用:混入的方法和属性在组件中使用时,需要通过 this 关键字来调用。在 <template> 中使用混入的属性和方法时,不需要使用 this。
编辑此页 (opens new window)
上次更新: 2025/01/30, 23:55:43
插槽 (Slots)
自定义指令 (directives)

← 插槽 (Slots) 自定义指令 (directives)→

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式