「组件」设计一款Collapse组件
栏目: JavaScript · 发布时间: 5年前
内容简介:最近在使用Vue+TypeScript鼓捣自己的组件库,期间参考不少(抄:joy:)
前言
最近在使用Vue+TypeScript鼓捣自己的组件库,期间参考不少(抄:joy:) element , iview 的源码。发现了一些常用的功能的背后,往往是复杂的实现。于是准备写一系列文章,介绍这些组件背后的原理。今天是第三篇,手把手带你实现Collapse组件。
Collapse
参考iview和element的API设计。外层的Collapse组件,主要用于存放内层的CollapseItem组件,以及控制内层CollapseItem组件的显示状态。内层的CollapseItem组件,主要用来存放用户的自定义内容。
模版
Props
Collapse主要接收2个参数。
- value ,可以是一个数组或者字符串。如果是数组,代表支持多个CollapseItem同时展开。如果是字符串则代表同一时刻只能有一个CollapseItem展开。
- accordion ,是否支持手风琴效果。
created
在created生命周期中,使用this.$on监听**collapse-item-click**事件,事件参数是CollapseItem的name值。**由于我们使用的是slot插槽,我们没有办法直接在子组件中使用this.$emit向上传递事件。我们将在子组件中使用dispath, 向上广播事件。**
Data
- currentValue,当前激活的CollapseItem的key的集合。
Wath
监听props的value属性,及时响应外部的更新,同时 向下广播,通知子组件当前激活的key的修改
Methods
Collapse组件主要有两个内置的方法。 handleCollapseItemClick ,处理CollapseItem的点击。
setCurrentValue,设置当前激活的CollapseItem的key的集合。根据是否开启手风琴效果,做不同的处理。同时向子组件广播,当前激活key集合的更改。子组件针对更改,做出显隐处理。
Provide
向子组件注入父组件的实例,方便子组件获取父组件的属性。
:star2:this.dispatch & this.broadcast
this.dispatch和this.broadcast原本是Vue1.0中弃用的方法,因为this.dispatch和this.broadcast滥用,会导致整个事件流难以理解。
Vue文档中更推荐我们使用Vuex进行状态管理,但是我们写的是组件库,使用Vuex会形成额外的依赖。为了方便起见,我们将重写dispatch和broadcast方法。
findChildsComponent方法使用$children属性。向下查找指定name的子组件。如果没有找到,使用递归的方法,查找子组件的子组件。
vm.$children, 当前实例的直接子组件
findParentComponent方法利用$parent属性,向上查找指定name的父组件。如果没有找到,使用递归的方法,查找父组件的父组件。
vm.$parent, 父实例,如果当前实例有的话。
dispatch,和broadcast方法在找到对应的组件后,会在调用组件实例的$emit方法,在组件实例上的$on会监听到$emit传播的事件。
CollapseItem
模版
模版主要分为上下两部分,header部分和内容部分。点击header部分,会展开content部分。再次点击后,会收起content的部分。
Props
CollapseItem接收两个属性
- title, CollapseItem的标题
- name, CollapseItem的唯一标识,当Collapse组件的currentValue属性,包含这个唯一标识时,CollapseItem会展开。
created
在created中监听 collapse-active-update 事件
Data
- isActive, 根据父组件的currentValue属性,判断当前CollapseItem是否需要展开。
Inject
接收父组件的注入,collapse属性是父组件的实例。
Methods
CollapseItem包含两个方法:
- handleCollapseItemClick,点击CollapseItem,向上广播'collapse-item-click'事件,参数是当前组件的name。
- handleCollapseActiveUpdate,父组件通知子组件当前激活collapseItem集合的更改,CollapseItem判断自身的key是否在激活的collapseItem集合中。做出显隐处理。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 「组件」设计一款Notice组件
- 「组件」设计一款Grid组件
- 「组件」设计一款Notice组件
- React组件设计实践总结02 - 组件的组织
- React组件设计实践总结04 - 组件的思维
- React组件设计规则
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
智能家居:商业模式+案例分析+应用实战
陈国嘉 / 人民邮电出版社 / 2016-4 / 49.80元
作为万物互联的关键一环,智能家居的出现和普及已经势不可当,以移动互联网为核心的新技术正在重构智能家居。只有成为智能家居行业的先行者,才能抢占“风口”。 《智能家居:商业模式+案例分析+应用实战》紧扣“智能家居”,从3个方面进行专业、深层次的讲解。首要方面是基础篇,从智能家居的发展现状、产业链、商业分析、抢占入口等方面进行阐述,让读者对智能家居有个初步的认识;第二个方面是技术篇,从智能家居的控......一起来看看 《智能家居:商业模式+案例分析+应用实战》 这本书的介绍吧!
CSS 压缩/解压工具
在线压缩/解压 CSS 代码
RGB CMYK 转换工具
RGB CMYK 互转工具