封装自定义组件
封装组件的意义
- 根源:在构建多页面应用时,有很多相似的视图结构,但没法实现复用
- 作用:封装复用,快速开发
如何封装可复用的UI组件
- 设计UI组件 = 自定义属性(v-bind) + 自定义事件(v-on) + 自定义插槽( v-slot)
- 根据UI稿和PRD原型,对一组视图进行分析,找出它们之间的相似点和差异点
- 把相同点设计成HTML视图结构
- 使用自定义属性设计那些文本、样式等差异
- 使用自定义事件,设计那些有差异的功能(交互事件、功能事件)
- 使用自定义插槽设计那些可以由用户自定义的视图结构
在Vue中如何封装组件
- template选项,用于指定组件的视图结构
- props选项,用于接收父组件传递过来的自定义属性
- data(){}选项,用于定义组件自有的声明式变量
- methods选项,用于封装组件自有的函数或事件处理器
- this.$emit('自定义事件名','事件参数') 用于在组件中向父组件传递数据
理解插槽
- Vue内置了一个组件
<slot>组件
- 当我们在封装自定义组件时,如果一段视图结构无法确定,这时可以使用
<slot>占位,把这个视图位置交给用户决定
- 具名插槽
- 的默认名字叫default
- 当在自定义组件中需要用到多个不同的时,我们给它取个名字,即
<slot name='icon'>
- 当用户使用这个自定义组件时,使用
v-slot:icon 来指定显示在哪些具名插槽中
- v-slot指令
- 可指定视图结构显示在哪个具名插槽中
- 简写为 #具名插槽名='scope'
<template #slot='icon'></template>