基本完工了,但是代码还是很丑,重复的地方过多
汇总全局设定
首先,先让我们建立一个全局设定文件,方便后续查阅、管理
出于个人爱好,我喜欢管这样的文件叫 Global,并且我决定放在 src 目录下
| 1 | // Global.ts | 
该文件告诉了外部引用者,本项目的几个主要文档页的信息
化简样例
显然每个在 src/component 下的组件文档页都是引用 ./example 下对应的例子
那么我们应该把引用收束到一起,再暴露给组件文档页
首先,新建 src/component/contents 文件夹,为每个组件新建对应的样例管理文件
显然,该文件需要包含
- 所有的样例引入
- 该样例专属的参数列表
例如为 Button 组件新建 src/component/contents/Button.ts 文件
| 1 | import LabyComponent1 from "../example/Button/Button1.example.vue"; | 
我为 Button 创建了 6 个样例,所以有 6 条静态引入
注意,对 vue 文件的引入,只能在代码中静态引入,不可以像 md 一样动态引入,否则必须要先配置对 vue 文件的额外解析
然后在 Button 组件文档页中引入该 ts
| 1 | import LabyCard from "../lib/Card.vue"; | 
修改模板为 v-for 遍历
| 1 | <template> | 
效果如图

抽取公用显示
显然,每个组件文档页,都具有与 Button 组件文档页类似的结构
那么我们可以把这个结构抽取出来,然后按照需要进行引入
先抽取结构,我选择在 src/views 下新建 Content.vue 来承载这个结构
组件列表和参数表通过 src/components/contents 下的汇总来引入
引入后,根据字段名的不同,制作哈希表 LabyMap
再要求用户传入参数 props,通过 name 来指定选择要显示哪个组件文档页,通过 title 来指示现在的组件文档页的标题
| 1 | // Content.vue | 
同理可以抽取指南文档页的结构到 src/views/Guidance.vue
| 1 | // Guidance.vue | 
然后修改 router.ts,通过路由来传递参数
| 1 | // router.ts | 
现在,就可以删除 src/component 下,没有被引用的组件了
如无意外,现在该目录下,应该只有
- contents,文件夹
- example,文件夹
- Topnav.vue
精简 router
这个 router.ts 看起来也还是很糟心,再优化一下吧
注意到重复的部分出现在 children 字段下,而该字段的值是个数组,每个数组项都是一个包含 3 个字段的对象
那么我们可以先定义这个对象
| 1 | // router.ts | 
再观察指南的路由,和组件的路由,有如下规律
- 指南的路由- 其 path值集合,与Global.ts中的guidances对象的keys是一致的
- 其 props中传入的键集合,与Global.ts中的guidances对象的keys是一致的
 
- 其 
- 组件的路由- 其 path值集合,与Global.ts中的components对象的keys.toLowerCase是一致的
- 其 props中传入的键集合,与Global.ts中的components对象的keys是一致的
 
- 其 
那么容易得到指南路由的数组和组件路由的数组
| 1 | // router.ts | 
然后在路由配置的 children 字段下,使用 spread 语法展开这两个数组即可
| 1 | // router.ts | 
好了,现在的代码,就几乎没有冗余,非常漂亮了
感谢阅读