vue组件讲解

本文详细介绍了Vue组件的基础知识,包括组件命名规则、创建与引用,以及组件复用。深入探讨了父组件如何通过props向子组件传递数据,子组件如何通过$emit向父组件传递数据。同时,展示了在组件上使用v-model的技巧。最后,讨论了动态组件的使用,包括基础应用和动态组件的缓存机制。

一、组件基础

1.1、组件命名规则

使用 kebab-case

如:hello-world   解析后   HelloWorld

使用 PascalCase

如:HelloWorld   解析后   HelloWorld

注意:禁止使用驼峰命名法,如:helloWorld  会解析成  helloworld 

1.2、组件的创建

1.1.1我们在components文件夹下创建一个名为“HelloWorld.vue”的vue文件

1.1.2、在文件里添加一个 template 模板

注意:组件内容必须以 template 模板包裹,格式为:<template><div>组件内容</div></template>

1.1.3、js代码段添加 name 名称和 data 属性值

1.1.4、template 模板中添加一个h3标签,将属性值显示在这里

1.3、组件的引用

1.2.1、在App.vue文件中js代码段中引入刚才创建的HelloWorld.vue文件

代码:import 别名 from 文件路径,如 import HelloWorld from './components/HelloWorld.vue'

1.2.2、在App.vue文件中js代码段中注册组件

组件注册:components: { 组件名 },组件名之间用逗号隔开,如 components: {  HelloWorld  }

1.2.3、在App.vue文件中使用组件

使用组件:<组件名 /> 或 <组件名></组件名 >,组件名以标签的形式使用,如 <HelloWorld /> 或 <hello-world />

1.2.4、运行测试

大家都知道,vu

### Vue.js 组件的使用和原理 #### 1. **Vue.js 组件的基础概念** 组件Vue.js 应用的核心构建块,能够封装 HTML、CSS 和 JavaScript。它们允许开发者将复杂的界面拆分为更小的、可重用的部分[^3]。 - **模板定义**: 使用 `<template>` 标签来描述组件的结构。 - **逻辑处理**: 使用 `<script>` 标签编写组件的行为逻辑。 - **样式管理**: 使用 `<style>` 标签定义组件的样式。 ```html <template> <div class="component"> {{ message }} </div> </template> <script> export default { data() { return { message: 'Hello, Component!' }; } }; </script> <style scoped> .component { color: blue; } </style> ``` --- #### 2. **组件注册方式** ##### 全局注册 全局注册的组件可以在任何地方使用,适合通用型组件。 ```javascript // 注册名为 my-global-component 的全局组件 Vue.component('my-global-component', { template: '<div>A globally registered component!</div>' }); ``` ##### 局部注册 局部注册的组件只在其父组件范围内有效,适合特定场景下的专用组件。 ```javascript new Vue({ el: '#app', components: { 'local-component': { template: '<div>A locally registered component!</div>' } } }); ``` --- #### 3. **组件生命周期钩子** Vue.js 提供了一系列生命周期钩子,用于在不同阶段执行操作。这些钩子按顺序依次触发: | 钩子名称 | 描述 | |------------------|----------------------------------------------------------------------| | `beforeCreate` | 实例初始化后立即调用,此时还未开始数据观测和事件/Watcher 设置 | | `created` | 数据观测和事件/Watcher 设置完成后的回调 | | `beforeMount` | 模板编译成虚拟 DOM 后,但在真实 DOM 渲染前调用 | | `mounted` | 真实 DOM 已经挂载到实例上 | | `beforeUpdate` | 数据变化时,在虚拟 DOM 更新之前调用 | | `updated` | 虚拟 DOM 更新并反映到真实 DOM 上 | | `beforeDestroy` | 实例销毁之前的最后一个机会 | | `destroyed` | 实例已完全销毁 | 示例代码展示如何监听生命周期钩子: ```javascript export default { beforeCreate() { console.log('Before Create'); }, created() { console.log('Created'); }, mounted() { console.log('Mounted'); }, destroyed() { console.log('Destroyed'); } }; ``` --- #### 4. **组件间的通信机制** ##### Props 下传 Props 是一种单向的数据流,父组件通过 props 将数据传递给子组件[^3]。 ```vue <!-- 子组件 --> <template> <p>{{ title }}</p> </template> <script> export default { props: ['title'] }; </script> ``` ```vue <!-- 父组件 --> <child-component :title="'This is a prop'" /> ``` ##### 自定义事件上传 ($emit) 子组件可以通过 `$emit` 方法通知父组件某些状态的变化。 ```vue <!-- 子组件 --> <button @click="$emit('custom-event')">Click Me</button> ``` ```vue <!-- 父组件 --> <child-component @custom-event="handleEvent"></child-component> ``` ##### Provide / Inject 提供了一种跨层级组件之间共享数据的方式,无需逐层传递 props[^3]。 ```javascript // 祖先组件 export default { provide() { return { sharedData: this.sharedData }; }, data() { return { sharedData: 'Shared Value' }; } }; // 子孙组件 export default { inject: ['sharedData'], mounted() { console.log(this.sharedData); // 输出 Shared Value } }; ``` --- #### 5. **实战案例:构建可复用的表单组件** 下面是一个简单的表单组件实现,支持动态验证和提交功能[^5]。 ```vue <template> <form @submit.prevent="handleSubmit"> <!-- 动态插入表单项 --> <slot></slot> <!-- 默认提交按钮 --> <slot name="submit"> <button type="submit">Submit</button> </slot> </form> </template> <script> export default { methods: { handleSubmit() { const results = []; function validate(children) { children.forEach(child => { if (child.$options.name === 'FormItem') { results.push(child.validate()); } if (child.$children) { validate(child.$children); } }); } validate(this.$children); Promise.all(results).then(() => { this.$emit('submit'); }).catch(() => { alert('Validation failed!'); }); } } }; </script> ``` --- #### 6. **推荐学习资源** 对于希望深入理解 Vue.js 组件开发的学习者,建议参考以下资料[^1][^2]: - Vue.js 官方文档中的组件章节。 - Aresn 编写的《Vue.js 实战》,涵盖了丰富的组件开发技巧。 - 掘金社区中关于 Vue.js 的高质量文章和技术分享。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值