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

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

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

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

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • 微信小程序
    • 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
    • 微信小程序
    • 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

(进入注册为作者充电)

  • 快速入门

  • 后端手册

  • 前端手册

    • 前端通用方法
    • 前端开发规范
    • 前端请求流程
    • 前端路由使用
    • Vue 组件使用
      • 一、组件注册方式
        • 1. 局部注册
        • 2. 全局注册
      • 二、创建与使用组件
        • 1. 创建一个组件
        • 2. 在父组件中使用子组件
      • 三、组件通信
        • 1. 使用 props 传递数据
        • 2. 使用 $emit 触发事件
    • 前端动态菜单
    • 前端权限控制
    • 前台菜单管理
    • 多级目录与路由
    • 前端页签缓存
    • 使用 Svg Icon 图标
    • 使用字典功能
    • 动态系统参数
    • Axios 封装
    • 切换访问路径
    • 内容复制功能
  • 组件文档

  • 数据库分析

  • 若依框架
  • 前端手册
scholar
2024-08-31
目录

Vue 组件使用

# Vue 组件使用

在 Vue.js 项目开发中,组件是非常重要的一部分,合理地使用组件可以极大地提高项目的可维护性和开发效率。本文将详细介绍 Vue 组件的注册方式、创建和使用方法以及组件间的通信方式。

# 一、组件注册方式

在 Vue.js 中,组件可以通过局部注册和全局注册两种方式进行注册。

# 1. 局部注册

局部注册适用于仅在单个页面或特定模块中使用的组件。你需要在 components 选项中手动注册组件,然后在模板中使用。

示例:

<template>
  <!-- 使用局部注册的 countTo 组件 -->
  <count-to :startVal="startVal" :endVal="endVal" :duration="3000"></count-to>
</template>

<script>
// 引入组件
import countTo from 'vue-count-to';

export default {
  components: { countTo }, // 在 components 选项中注册组件
  data() {
    return {
      startVal: 0,
      endVal: 2020
    }
  }
}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

优点: 局部注册能够避免全局命名冲突,适用于只在某些页面使用的组件。

# 2. 全局注册

全局注册适用于在多个页面或整个应用中频繁使用的组件。你可以在 main.js 中注册组件,这样它就可以在整个项目中使用,无需在每个文件中手动引入。

示例:

// 在 main.js 中全局注册组件
import Vue from 'vue';
import countTo from 'vue-count-to';

Vue.component('countTo', countTo);
1
2
3
4
5
<template>
  <!-- 直接使用全局注册的 countTo 组件 -->
  <count-to :startVal="startVal" :endVal="endVal" :duration="3000"></count-to>
</template>
1
2
3
4

优点: 全局注册能够在任何地方使用,省去了重复注册的麻烦。

# 二、创建与使用组件

组件是 Vue.js 的基本构建块,创建一个 Vue 组件通常包括模板、脚本和样式三部分。

# 1. 创建一个组件

创建一个 .vue 文件,并在其中定义组件的模板、脚本和样式。

示例:

<!-- a.vue 子组件 -->
<template>
  <div>这是a组件</div>
</template>

<script>
export default {
  name: 'AComponent' // 组件名称
};
</script>

<style scoped>
/* 可选的组件样式 */
</style>
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 2. 在父组件中使用子组件

在父组件中导入并注册子组件,然后在模板中使用。

示例:

<!-- 父组件 -->
<template>
  <div style="text-align: center; font-size: 20px">
    测试页面
    <!-- 使用子组件 -->
    <testa></testa>
  </div>
</template>

<script>
// 导入子组件
import a from "./a";

export default {
  components: { testa: a } // 注册子组件
};
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 三、组件通信

组件通信是 Vue.js 中的重要部分,通常通过 props 传递数据,通过 $emit 触发事件来进行通信。

# 1. 使用 props 传递数据

父组件可以通过 props 将数据传递给子组件。

示例:

<!-- 父组件 -->
<template>
  <div style="text-align: center; font-size: 20px">
    测试页面
    <testa :name="name"></testa> <!-- 通过 props 传递数据 -->
  </div>
</template>

<script>
import a from "./a";

export default {
  components: { testa: a },
  data() {
    return {
      name: "若依"
    };
  },
};
</script>

<!-- 子组件 -->
<template>
  <div>这是a组件 name:{{ name }}</div>
</template>

<script>
export default {
  props: {
    name: {
      type: String,
      default: ""
    }
  }
};
</script>
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
32
33
34
35
36

# 2. 使用 $emit 触发事件

子组件可以通过 $emit 触发自定义事件,将数据传递给父组件。

示例:

<!-- 父组件 -->
<template>
  <div style="text-align: center; font-size: 20px">
    测试页面
    <testa :name="name" @ok="ok"></testa> <!-- 监听子组件事件 -->
    子组件传来的值 : {{ message }}
  </div>
</template>

<script>
import a from "./a";

export default {
  components: { testa: a },
  data() {
    return {
      name: "若依",
      message: ""
    };
  },
  methods: {
    ok(message) {
      this.message = message; // 接收子组件传递的数据
    }
  }
};
</script>

<!-- 子组件 -->
<template>
  <div>
    这是a组件 name:{{ name }}
    <button @click="click">发送</button>
  </div>
</template>

<script>
export default {
  props: {
    name: {
      type: String,
      default: ""
    }
  },
  data() {
    return {
      message: "我是来自子组件的消息"
    };
  },
  methods: {
    click() {
      this.$emit("ok", this.message); // 通过 $emit 触发事件
    }
  }
};
</script>
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
编辑此页 (opens new window)
上次更新: 2024/12/28, 18:32:08
前端路由使用
前端动态菜单

← 前端路由使用 前端动态菜单→

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