Vue 2 中组件详解

embedded/2024/9/23 18:03:09/
  1. 什么是组件?
    在Vue中,组件是可复用的Vue实例,每个组件都可以拥有自己的模板、脚本和样式。通过组件化,我们可以将页面拆分为多个独立的、可复用的部分,使得代码更易于维护和扩展。

  2. 创建组件
    在Vue 2中,我们可以使用Vue.component()方法来创建全局组件,也可以使用Vue实例中的components选项来注册局部组件。例如:

javascript">// 全局组件
Vue.component('my-component', {// 组件选项
});// 局部组件
new Vue({el: '#app',components: {'my-component': {// 组件选项}}
});
  1. 组件通信
    1.Props(属性):
    Props 是父组件向子组件传递数据的一种方式。父组件可以通过在子组件上使用属性的方式传递数据,子组件可以在props选项中声明接收这些数据。例如:
javascript"><!-- 父组件 -->
<template><ChildComponent message="Hello from parent"></ChildComponent>
</template><!-- 子组件 -->
<script>
export default {props: ['message'],mounted() {console.log(this.message);}
}
</script>

2.emit(事件)∗∗:emit是子组件向父组件传递消息的一种方式。子组件可以通过$emit方法触发一个自定义事件,并且可以携带数据。父组件可以监听这个事件,并且接收携带的数据。例如:

javascript">
<!-- 子组件 -->
<template><button @click="sendMessage">Send Message</button>
</template><script>
export default {methods: {sendMessage() {this.$emit('message', 'Hello from child');}}
}
</script><!-- 父组件 -->
<template><ChildComponent @message="handleMessage"></ChildComponent>
</template><script>
export default {methods: {handleMessage(message) {console.log(message); // 输出:Hello from child}}
}
</script>

3.事件总线:
事件总线是一种全局通信的方式,可以用于非父子组件之间的通信。通过创建一个Vue实例作为事件总线,其他组件都可以通过这个实例来触发和监听事件。例如:

javascript">// EventBus.js
import Vue from 'vue';
export const EventBus = new Vue();// 子组件1
import { EventBus } from './EventBus';
export default {methods: {sendMessage() {EventBus.$emit('message', 'Hello from component 1');}}
}// 子组件2
import { EventBus } from './EventBus';
export default {mounted() {EventBus.$on('message', message => {console.log(message); // 输出:Hello from component 1});}
}
  1. 动态组件
    使用动态组件标签:你可以在模板中使用标签,并通过一个特定的属性(例如is)来指定要渲染的组件。这个属性的值可以是一个组件的名称或者一个组件的引用。
javascript"><template><component :is="currentComponent"></component>
</template><script>
import ComponentA from './ComponentA.vue';
import ComponentB from './ComponentB.vue';export default {data() {return {currentComponent: 'ComponentA'};},methods: {toggleComponent() {this.currentComponent = this.currentComponent === 'ComponentA' ? 'ComponentB' : 'ComponentA';}}
}
</script>

5.单文件组件
单文件组件通常包含三个部分:

1.模板(Template):包含组件的HTML结构,使用Vue的模板语法来定义组件的呈现方式。

2.脚本(Script):包含组件的JavaScript逻辑,可以包括组件的数据、方法、生命周期钩子等。

3.样式(Style):包含组件的CSS样式,可以使用普通的CSS或者预处理器(如Sass、Less)来编写。

javascript"><!-- MyComponent.vue -->
<template><div><h1>{{ message }}</h1><button @click="increment">Increment</button></div>
</template><script>
export default {data() {return {message: 'Hello Vue!',count: 0};},methods: {increment() {this.count++;}}
};
</script><style scoped>
h1 {color: blue;
}
button {background-color: green;color: white;
}
</style>

http://www.ppmy.cn/embedded/33884.html

相关文章

力扣-349. 两个数组的交集

文章目录 力扣题目代码C实现(set容器)C实现(map容器) 力扣题目 给定两个数组 nums1 和 nums2 &#xff0c;返回 它们的 交集。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 示例 1&#xff1a; 输入&#xff1a;nums1 [1,2,2,1], nums2 [2,2] 输…

2024年全国保密宣传教育月的主题是()。A.贯彻落实保密法。你我都是护密人B.国家利益高于一切,保密责任重于泰山C.筑牢保密防线,维护国家安全

2024年全国保密宣传教育月的主题是()。点击查看答案 A.贯彻落实保密法。你我都是护密人B.国家利益高于一切&#xff0c;保密责任重于泰山 C.筑牢保密防线&#xff0c;维护国家安全D.共筑保密防线&#xff0c;公民人人有责 坚持不懈开展保密宣传教育&#xff0c;是保密工作实…

JavaScript中的深拷贝与浅拷贝

目录 引言&#xff1a; 一、浅拷贝&#xff08;Shallow Copy&#xff09; 二、深拷贝&#xff08;Deep Copy&#xff09; 实现深拷贝的方法&#xff1a; 1.使用JSON.parse(JSON.stringify(obj)) 2.使用递归实现深拷贝 三、总结 引言&#xff1a; 在JavaScript中&#xff0…

5.5代码

目录 1.内存空间 1.内存空间 真的要吐了&#xff0c;人都麻了题还没看完&#xff0c;看样子就是要想办法提取出来想要的东西2022第十三届蓝桥杯决赛C/C大学A组-C题内存空间_蓝桥杯a组c语言题目-CSDN博客 这个是一个非常清晰的代码&#xff0c;好几个帖子都管这个题叫大模拟题…

【华为】路由综合实验(OSPF+BGP基础)

【华为】路由综合实验 实验需求拓扑配置AR1AR2AR3AR4AR5PC1PC2 查看通信OSPF邻居OSPF路由表 BGPBGP邻居BGP 路由表 配置文档 实验需求 ① 自行规划IP地址 ② 在区域1里面 启用OSPF ③ 在区域1和区域2 启用BGP&#xff0c;使AR4和AR3成为eBGP&#xff0c;AR4和AR5成为iBGP对等体…

远程为ubuntu安装teamviwer(无UI界面) - 简书

远程为ubuntu安装teamviwer&#xff08;无UI界面&#xff09; - 简书 远程为ubuntu安装teamviwer&#xff08;无UI界面&#xff09; - 简书

Linux使用单总线驱动DS18b20

onewire单总线&#xff1a; 一. 基础知识&#xff1a; 单总线&#xff1a;串行模式&#xff0c;一条线&#xff0c;包括时钟线和数据线&#xff0c;根据设备地址&#xff0c;像IIC一样可实现一主多从。 常见引脚&#xff1a;三根线&#xff0c;信号线&#xff0c;vcc&#xf…

八股文(C#篇)

C#中的数值类型 堆和栈 值类型的数据被保存在栈&#xff08;stack)上&#xff0c;而引用类型的数据被保存在堆&#xff08;heap&#xff09;上&#xff0c;当值类型作为参数传递给函数时&#xff0c;会将其复制到新的内存空间中&#xff0c;因此在函数中对该值类型的修改不会影…