Vue.js组件开发指南

Vue.js组件开发指南

Vue.js 是一个渐进式的 JavaScript 框架,用于构建用户界面。它的核心是基于组件的开发模式。通过将页面分解为多个独立的、可复用的组件,开发者能够更轻松地构建复杂的应用。本文将深入探讨 Vue.js 组件开发的基础知识,并通过代码示例展示如何开发和使用组件。
在这里插入图片描述

1. 组件的基本概念

在 Vue.js 中,组件是独立的、可复用的 Vue 实例。每个组件包含自己的逻辑、模板、样式,并且可以通过 props 和事件与其他组件进行交互。组件可以像HTML标签一样使用,从而使得开发者能够通过模块化的方式构建页面。

1.1 组件的基本结构

Vue.js 组件的基本结构通常包括三部分:

  • template: 定义了组件的HTML结构。
  • script: 定义了组件的逻辑,如数据、方法和生命周期钩子。
  • style: 定义了组件的样式,通常是局部作用域的样式。
<template><div class="my-component"><h1>{{ title }}</h1><p>{{ message }}</p></div>
</template><script>
export default {name: 'MyComponent',data() {return {title: 'Hello Vue!',message: 'This is a basic Vue component'}}
}
</script><style scoped>
.my-component {text-align: center;
}
</style>

1.2 注册组件

在 Vue.js 中,组件可以通过两种方式进行注册:

  • 局部注册:仅在某个父组件中使用子组件。
  • 全局注册:在整个应用程序中都能使用该组件。
局部注册

局部注册意味着组件只能在声明它的父组件中使用。注册方式如下:

<template><div><my-component></my-component></div>
</template><script>
import MyComponent from './MyComponent.vue';export default {components: {MyComponent}
}
</script>
全局注册

全局注册意味着组件在应用的任何地方都可以使用。通常在应用的入口文件(如 main.js)中注册:

import Vue from 'vue';
import MyComponent from './components/MyComponent.vue';Vue.component('my-component', MyComponent);new Vue({render: h => h(App),
}).$mount('#app');

在这里插入图片描述

2. 组件之间的通信

Vue.js 提供了多种方式来实现组件之间的通信。最常用的方式是通过 propsevents

2.1 使用 props 向子组件传递数据

props 是一种将数据从父组件传递到子组件的机制。在子组件中定义 props,然后在父组件中传递数据。

子组件:

<template><div><h1>{{ title }}</h1></div>
</template><script>
export default {props: {title: {type: String,required: true}}
}
</script>

父组件:

<template><div><child-component :title="'Hello from Parent'"></child-component></div>
</template><script>
import ChildComponent from './ChildComponent.vue';export default {components: {ChildComponent}
}
</script>

2.2 使用事件向父组件发送消息

当子组件需要与父组件通信时,通常使用事件。Vue.js 提供了 $emit 方法,子组件可以通过它向父组件发送自定义事件,父组件可以通过 v-on 监听该事件。

子组件:

<template><button @click="sendMessage">Click me</button>
</template><script>
export default {methods: {sendMessage() {this.$emit('message', 'Hello from Child');}}
}
</script>

父组件:

<template><div><child-component @message="handleMessage"></child-component><p>{{ message }}</p></div>
</template><script>
import ChildComponent from './ChildComponent.vue';export default {components: {ChildComponent},data() {return {message: ''}},methods: {handleMessage(payload) {this.message = payload;}}
}
</script>

2.3 使用插槽传递内容

Vue 提供了一种机制,允许父组件向子组件传递嵌套内容,这就是 插槽 (Slots)。通过插槽,父组件可以将 HTML 代码块传递给子组件进行渲染。

子组件:

<template><div><slot></slot></div>
</template>

父组件:

<template><div><child-component><p>This is passed from the parent component</p></child-component></div>
</template><script>
import ChildComponent from './ChildComponent.vue';export default {components: {ChildComponent}
}
</script>

Vue 还支持 具名插槽作用域插槽,用于更复杂的内容传递。
在这里插入图片描述

3. 组件生命周期

Vue.js 组件有一系列的生命周期钩子,这些钩子函数可以让开发者在组件的不同阶段执行特定逻辑。

3.1 生命周期钩子

常见的生命周期钩子有:

  • created: 组件实例刚刚创建完成时调用。
  • mounted: 组件被挂载到 DOM 后调用。
  • updated: 组件更新时调用。
  • destroyed: 组件销毁时调用。
<template><div><p>{{ message }}</p></div>
</template><script>
export default {data() {return {message: 'Hello Vue!'}},created() {console.log('Component created');},mounted() {console.log('Component mounted');},updated() {console.log('Component updated');},destroyed() {console.log('Component destroyed');}
}
</script>

在这里插入图片描述

4. 组件的复用性和动态组件

4.1 动态组件

Vue 提供了一个 <component> 标签,允许动态切换组件。通过绑定 is 属性,可以根据条件渲染不同的组件。

<template><div><button @click="currentComponent = 'compA'">Load A</button><button @click="currentComponent = 'compB'">Load B</button><component :is="currentComponent"></component></div>
</template><script>
import CompA from './CompA.vue';
import CompB from './CompB.vue';export default {data() {return {currentComponent: 'compA'}},components: {compA: CompA,compB: CompB}
}
</script>

在这里插入图片描述

5. 实践示例:TodoList 组件

接下来,我们将开发一个简单的 TodoList 组件,演示组件开发的整个流程。

TodoItem.vue

<template><li :class="{ completed: todo.completed }"><input type="checkbox" v-model="todo.completed" /><span>{{ todo.text }}</span><button @click="$emit('remove')">Remove</button></li>
</template><script>
export default {props: {todo: Object}
}
</script><style scoped>
.completed {text-decoration: line-through;
}
</style>

TodoList.vue

<template><div><h1>Todo List</h1><input v-model="newTodo" @keyup.enter="addTodo" placeholder="Add a todo" /><ul><todo-item v-for="(todo, index) in todos" :key="index" :todo="todo" @remove="removeTodo(index)" /></ul></div>
</template><script>
import TodoItem from './TodoItem.vue';export default {components: {TodoItem},data() {return {newTodo: '',todos: []}},methods: {addTodo() {if (this.newTodo.trim()) {this.todos.push({ text: this.newTodo, completed: false });this.newTodo = '';}},removeTodo(index) {this.todos.splice(index, 1);}}
}
</script><style scoped>
ul {list-style-type: none;padding: 0;
}
</style>

在这里插入图片描述

6. 结论

Vue.js 的组件开发模式为构建复杂的应用提供了良好的结构和复用性。通过组件化开发,可以将复杂的用户界面分解

为易于管理的、独立的模块。在实际项目中,合理的组件划分和数据通信方式是确保项目稳定性和可维护性的关键。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

35 | 实战一(下):手把手带你将ID生成器代码从“能用”重构为“好用”

上篇文章中&#xff0c;我们结合 ID 生成器代码讲解了如何发现代码质量问题。虽然 ID 生成器的需求非常简单&#xff0c;代码行数也不多&#xff0c;但看似非常简单的代码&#xff0c;实际上还是有很多优化的空间。综合评价一下的话&#xff0c;小王的代码也只能算是“能用”、…

线上线下融合发展:开启商业新未来

在当今时代&#xff0c;线上与线下融合发展已成为商业领域的重要趋势。 线上通常指通过互联网等信息技术进行的商业活动&#xff0c;具有便捷、高效、覆盖面广等优势&#xff1b;线下则是传统实体商业活动&#xff0c;在体验、服务、信任度方面有独特价值。 线上与线下融合发展…

【RocketMQ】MQ与RocketMQ介绍

&#x1f3af; 导读&#xff1a;本文介绍了消息队列&#xff08;MQ&#xff09;的基本概念及其在分布式系统中的作用&#xff0c;包括实现异步通信、削峰限流和应用解耦等方面的优势&#xff0c;并对ActiveMQ、RabbitMQ、RocketMQ及Kafka四种MQ产品进行了对比分析&#xff0c;涵…

AIGC教程:如何用Stable Diffusion+ControlNet做角色设计?

前言 对于生成型AI的画图能力&#xff0c;尤其是AI画美女的能力&#xff0c;相信同行们已经有了充分的了解。然而&#xff0c;对于游戏开发者而言&#xff0c;仅仅是漂亮的二维图片实际上很难直接用于角色设计&#xff0c;因为&#xff0c;除了设计风格之外&#xff0c;角色设…

S32K312 RTD 4.0.0 版本 OCU 例程配置流程说明

一、前言 由于 RTD 4.0.0 版本并没有 S32K312 相关例程&#xff0c;本文基于已有的 S32K344 OCU 例程&#xff0c;新建 S32K312 工程&#xff0c;讲解 OCU 例程的相关配置流程。 二、基本概念 OCU&#xff08;Output Compare Unit – 输出比较单元&#xff09;本质上是一个计…

工业数据采集系统

一、网页部分代码 效果图&#xff1a; 代码实现&#xff1a; <!DOCTYPE html> <html lang"zh"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0&qu…

c语言200例 066

大家好&#xff0c;欢迎来到无限大的频道 今天给大家带来的是c语言200例。 要求&#xff1a; 根据输入的职业表示&#xff0c;区分是老师还是学生&#xff0c;然后根据输入的信息&#xff0c;将对应的信息输出&#xff0c;如果是学生&#xff0c;则输出班级&#xff0c;如果是…

电子连接器信号完整性仿真实训教程 一

电子连接器信号完整性仿真学习除需要熟悉软件的基本操作外&#xff0c;还需要基本的实际操作练习才能完全掌握&#xff0c;学以致用。因此推出几期实训教程&#xff0c;教程中将不再详细讲怎么一步一步操作软件&#xff0c;重点讲一些步骤&#xff0c;及一些技巧。也会将连接器…

人工值守向无人值守转变的智慧油站开源了

AI视频监控平台简介 AI视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本。用…

OpenCV图像文件读写(4)解码图像数据函数imdecode()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 从内存缓冲区读取图像。 imdecode 函数从指定的内存缓冲区读取图像。如果缓冲区太短或包含无效数据&#xff0c;函数将返回一个空矩阵 (Mat::dat…

基于STM32的无人驾驶汽车路径规划与视觉识别系统

目录 引言项目背景环境准备 硬件准备软件安装与配置系统设计 系统架构关键技术代码示例 摄像头图像采集与处理路径规划算法实现实时视觉障碍物检测电机控制与执行应用场景结论 1. 引言 无人驾驶技术是当前自动化和人工智能领域的热门课题之一&#xff0c;涉及到复杂的感知、…

(二)Mat类

构造函数 Mat m(3, 2, CV_8UC3, Scalar(0, 0, 255)); std::cout << m << std::endl;创建一个行数为3&#xff0c;列数为2&#xff0c;图像元素是8位无符号整型&#xff0c;且有3个通道&#xff0c;图像所有像素值被初始化为(0,0,255) opencv中默认的颜色顺序为BGR…

第五十八周周报 FE-GNN

文章目录 week58 FE-GNN摘要Abstract一、大数据相关1. 完全分布式zookeeper2. 污水处理过程2.1 污水处理的基本方法2.2 污水处理基本工艺流程 二、文献阅读1. 题目2. Abstract3. 文献解读3.1 Introduce3.2 创新点 4. 网络框架4.1 特征子空间平坦化4.2 结构化主成分4.3 结论 5. …

OJ在线评测系统 前端创建题目(增) 更新题目(改) 题目列表(查) 以及做题页面的开发 基于VUECLI脚手架画界面

目录 前端创建页面的开发一 创建一个路由 用acro design写 前端创建页面的开发二 题目管理页面 搜索 最終效果 题目更新页面的开发 携带参数的那种 修改路由 页码更新细节 我们先处理菜单项的权限控制和权限隐藏 在这里改 属性绑定一个函数 可以参考聚合搜索项目…

Spring Boot项目连接Oracle数据库启动报错:Undefined Error

描述&#xff1a;远程拉下来的代码&#xff0c;配置了maven仓库后&#xff0c;未进行其他修改&#xff0c;自己本地启动报错。 报错现状&#xff1a; 解决&#xff1a;添加参数-Duser.nameuser后&#xff0c;启动成功。 原因分析&#xff1a; 分析一&#xff1a; maven仓…

第三节-类与对象(中)

1.类的6个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类&#xff08;空类大小为1&#xff09;。 空类中真的什么都没有吗&#xff1f;并不是&#xff0c;任何类在什么都不写时&#xff0c;编译器会自动生成以下6个默认成员函数。 默认成员函数&#xff1a;…

【html网页制作】旅游风景主题网页制作含css动画及js特效(8页面附效果源码)

HTMLCSS旅游风景主题旅游网页制作 &#x1f354;涉及知识&#x1f964;写在前面&#x1f367;一、网页主题&#x1f333;二、网页效果菜单切换效果PageA、整体页Page1、首页Page2、旅行趣事页Page3、旅行美景页Page4、旅行指南页Page5、旅行视频页Page6、留言页Page7、西湖简介…

论文阅读(十一):CBAM: Convolutional Block Attention Module

文章目录 1.Introduction2.Convolutional Block Attention ModuleExperimentsConclusion 论文题目&#xff1a;CBAM: Convolutional Block Attention Module&#xff08;CBAM&#xff1a;卷积注意力机制&#xff09;   论文链接&#xff1a;点击跳转   代码链接&#xff1a…

汽车3d动画渲染选择哪个?选择最佳云渲染解决方案

面临汽车3D动画渲染挑战&#xff1f;选择正确的云渲染服务至关重要。探索最佳解决方案&#xff0c;优化渲染效率&#xff0c;快速呈现逼真动画。 汽车3d动画渲染选择哪个&#xff1f; 对于汽车3D动画渲染&#xff0c;选择哪个渲染器取决于你的项目需求、预算和期望的效果。Ble…

Llama 3.1 技术研究报告-2

3.3 基础设施、扩展性和效率 我们描述了⽀持Llama 3 405B⼤规模预训练的硬件和基础设施&#xff0c;并讨论了⼏项优化措施&#xff0c;这些措施提⾼了训练效率。 3.3.1 训练基础设施 Llama 1和2模型在Meta的AI研究超级集群&#xff08;Lee和Sengupta&#xff0c;2022&#x…