当前位置: 首页 > news >正文

【Vue2 ✨】 Vue2 入门之旅(五):组件化开发

前几篇文章中我们学习了 Vue 的基础语法和生命周期。本篇将进入 组件化开发,这是 Vue 的核心思想之一。通过组件,我们可以让页面结构更清晰、代码更易维护。


目录

  1. 什么是组件
  2. 组件注册方式
    • 全局注册
    • 局部注册
  3. 父子组件通信
    • props
    • $emit
  4. 插槽
    • 默认插槽
    • 具名插槽
    • 作用域插槽
  5. 小结

什么是组件

组件是 Vue 的核心概念,可以理解为一个 可复用的 UI 模块
一个组件包含:模板、逻辑、样式。

例子:页面上有“头部”“内容区”“底部”,我们可以把它们写成独立组件。


组件注册方式

全局注册

通过 Vue.component 注册的组件,可以在所有实例中使用。

<div id="app"><my-component></my-component>
</div><script>
Vue.component('my-component', {template: '<p>我是全局组件</p>'
})new Vue({el: '#app'
})
</script>

局部注册

在某个 Vue 实例或组件内部注册,只能在该作用域中使用。

<div id="app"><local-comp></local-comp>
</div><script>
var LocalComp = {template: '<p>我是局部组件</p>'
}new Vue({el: '#app',components: {'local-comp': LocalComp}
})
</script>

父子组件通信

props 父传子

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

<div id="app"><child-comp :msg="parentMsg"></child-comp>
</div><script>
Vue.component('child-comp', {props: ['msg'],template: '<p>子组件收到:{{ msg }}</p>'
})new Vue({el: '#app',data: {parentMsg: '来自父组件的数据'}
})
</script>

$emit 子传父

子组件通过 $emit 向父组件发送事件。

<div id="app"><child-comp @child-click="handleChild"></child-comp>
</div><script>
Vue.component('child-comp', {template: '<button @click="$emit(\'child-click\')">点我</button>'
})new Vue({el: '#app',methods: {handleChild: function () {alert('父组件收到了子组件的事件!')}}
})
</script>

插槽

插槽(slot)用于让父组件向子组件插入内容。

默认插槽

<child-comp>这是插槽内容</child-comp><script>
Vue.component('child-comp', {template: '<div><slot></slot></div>'
})
</script>

具名插槽

<child-comp><template v-slot:header>这里是头部</template><template v-slot:footer>这里是底部</template>
</child-comp><script>
Vue.component('child-comp', {template: `<div><header><slot name="header"></slot></header><main>内容区域</main><footer><slot name="footer"></slot></footer></div>`
})
</script>

作用域插槽

子组件向插槽暴露数据,父组件决定如何渲染。

<list-comp :items="list"><template v-slot:default="slotProps"><p>{{ slotProps.item.text }}</p></template>
</list-comp><script>
Vue.component('list-comp', {props: ['items'],template: `<div><slot v-for="item in items" :item="item"></slot></div>`
})new Vue({el: '#app',data: {list: [{ text: '苹果' }, { text: '香蕉' }]}
})
</script>

小结

  1. 组件是 Vue 的核心,方便复用和维护。
  2. 注册方式分为 全局注册局部注册
  3. 父子通信:父传子用 props,子传父用 $emit
  4. 插槽提供更灵活的内容分发方式:默认插槽、具名插槽、作用域插槽。

📚下一篇文章,我们将学习 指令与过滤器,让模板更灵活。

http://www.xdnf.cn/news/1429381.html

相关文章:

  • 车载刷写架构 --- ECU软件更新怎么保证数据的正确性?
  • MATLAB矩阵及其运算(三)矩阵的创建
  • 应用层:HTTP/HTTPS协议
  • 【Python数据可视化:Matplotlib高级技巧】
  • 高效数据传输的秘密武器:Protobuf
  • 京东商品详情商品详情接口技术实现:从数据抓取到结构化解析全方案
  • LeetCode 777.在LR字符串中交换相邻字符
  • C++ 面试高频考点 力扣 852. 山脉数组的峰顶索引 二分查找 题解 每日一题
  • 【Linux笔记】命令行与vim基础
  • 单元测试总结2
  • MTK Linux DRM分析(二十六)- MTK mtk_drm_ddp_xxx.c
  • Spring Boot 3.5.3 集成 Log4j2 日志系统
  • 从spring MVC角度理解HTTP协议及Request-Response模式
  • 异常处理小妙招——1.别把“数据库黑话”抛给用户:论异常封装的重要性
  • 图像 OSD层数据 显示--OSD LOGO单色黑色显示,按区域大小申请MMZ内存的优缺点分析
  • 2022版Unity创建时没有2D灯光(2D Light),没有Global LIght2D怎么办?
  • Java集合遍历的方法有哪些
  • 使用Spark计算WordCount
  • 美团 LongCat 开源大模型60 亿参数 MoE 架构,赋能开发者加速 AI 应用落地
  • vue2中如何使用Ant Design Vue 中的 Tooltip 文字提示
  • 242. 有效的字母异位词| 349. 两个数组的交集
  • 通信中FDD和TDD的区别
  • 【JavaEE】多线程案例
  • 使用 Python 的 SymPy 进行符号计算
  • 机器学习回顾——决策树详解
  • 详解Grafana k6 的阈值(Thresholds)
  • FPGA时序分析(三)--基础知识
  • Leetcode_206.反转链表(递归)
  • 【嵌入式电机控制#进阶7】V/F强拖启动
  • 变频器实习DAY41 单元测试介绍