基本完工了,但是代码还是很丑,重复的地方过多
汇总全局设定
首先,先让我们建立一个全局设定文件,方便后续查阅、管理
出于个人爱好,我喜欢管这样的文件叫 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 |
好了,现在的代码,就几乎没有冗余,非常漂亮了
感谢阅读