「组件」设计一款Collapse组件

栏目: JavaScript · 发布时间: 6年前

内容简介:最近在使用Vue+TypeScript鼓捣自己的组件库,期间参考不少(抄:joy:)

「组件」设计一款Collapse组件

「组件」设计一款Collapse组件

前言

最近在使用Vue+TypeScript鼓捣自己的组件库,期间参考不少(抄:joy:) elementiview 的源码。发现了一些常用的功能的背后,往往是复杂的实现。于是准备写一系列文章,介绍这些组件背后的原理。今天是第三篇,手把手带你实现Collapse组件。

Collapse

「组件」设计一款Collapse组件

参考iview和element的API设计。外层的Collapse组件,主要用于存放内层的CollapseItem组件,以及控制内层CollapseItem组件的显示状态。内层的CollapseItem组件,主要用来存放用户的自定义内容。

模版

「组件」设计一款Collapse组件

Props

Collapse主要接收2个参数。

  • value ,可以是一个数组或者字符串。如果是数组,代表支持多个CollapseItem同时展开。如果是字符串则代表同一时刻只能有一个CollapseItem展开。
  • accordion ,是否支持手风琴效果。

「组件」设计一款Collapse组件

created

在created生命周期中,使用this.$on监听**collapse-item-click**事件,事件参数是CollapseItem的name值。**由于我们使用的是slot插槽,我们没有办法直接在子组件中使用this.$emit向上传递事件。我们将在子组件中使用dispath, 向上广播事件。**

「组件」设计一款Collapse组件

Data

  • currentValue,当前激活的CollapseItem的key的集合。

「组件」设计一款Collapse组件

Wath

监听props的value属性,及时响应外部的更新,同时 向下广播,通知子组件当前激活的key的修改

「组件」设计一款Collapse组件

Methods

Collapse组件主要有两个内置的方法。 handleCollapseItemClick ,处理CollapseItem的点击。

setCurrentValue,设置当前激活的CollapseItem的key的集合。根据是否开启手风琴效果,做不同的处理。同时向子组件广播,当前激活key集合的更改。子组件针对更改,做出显隐处理。

「组件」设计一款Collapse组件

Provide

向子组件注入父组件的实例,方便子组件获取父组件的属性。

「组件」设计一款Collapse组件

:star2:this.dispatch & this.broadcast

this.dispatch和this.broadcast原本是Vue1.0中弃用的方法,因为this.dispatch和this.broadcast滥用,会导致整个事件流难以理解。

Vue文档中更推荐我们使用Vuex进行状态管理,但是我们写的是组件库,使用Vuex会形成额外的依赖。为了方便起见,我们将重写dispatch和broadcast方法。

「组件」设计一款Collapse组件

findChildsComponent方法使用$children属性。向下查找指定name的子组件。如果没有找到,使用递归的方法,查找子组件的子组件。

vm.$children, 当前实例的直接子组件

findParentComponent方法利用$parent属性,向上查找指定name的父组件。如果没有找到,使用递归的方法,查找父组件的父组件。

vm.$parent, 父实例,如果当前实例有的话。

dispatch,和broadcast方法在找到对应的组件后,会在调用组件实例的$emit方法,在组件实例上的$on会监听到$emit传播的事件。

CollapseItem

模版

模版主要分为上下两部分,header部分和内容部分。点击header部分,会展开content部分。再次点击后,会收起content的部分。

「组件」设计一款Collapse组件

Props

CollapseItem接收两个属性

  • title, CollapseItem的标题
  • name, CollapseItem的唯一标识,当Collapse组件的currentValue属性,包含这个唯一标识时,CollapseItem会展开。

「组件」设计一款Collapse组件

created

在created中监听 collapse-active-update 事件

「组件」设计一款Collapse组件

Data

  • isActive, 根据父组件的currentValue属性,判断当前CollapseItem是否需要展开。

「组件」设计一款Collapse组件

Inject

接收父组件的注入,collapse属性是父组件的实例。

「组件」设计一款Collapse组件

Methods

CollapseItem包含两个方法:

  • handleCollapseItemClick,点击CollapseItem,向上广播'collapse-item-click'事件,参数是当前组件的name。
  • handleCollapseActiveUpdate,父组件通知子组件当前激活collapseItem集合的更改,CollapseItem判断自身的key是否在激活的collapseItem集合中。做出显隐处理。

「组件」设计一款Collapse组件


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

数据分析技术白皮书

数据分析技术白皮书

伍海凤、刘鹏、杨佳静、马师慧Sara、李博、Shirley Song、Zinc、李晓艳 / 2016-8-11 / 0

关于数据分析技术白皮书(Analytics Book 中文版),主要内容围绕: 1. 分析(Analytics):网站分析 & APP分析 2. 谷歌分析工具的原理、部署与使用 3. 开源网站分析工具的原理、部署与使用 4. Log日志分析原理 5. 网站分析的维度与指标定义 6. 如何炼成为一个互联网数据分析师 请访问书的数据分析技术白皮书官网“免费”阅......一起来看看 《数据分析技术白皮书》 这本书的介绍吧!

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具