Skip to content

Commit a6efe5a

Browse files
committed
docs: 添加"问题及解决方案",优化文档
1 parent f9e754b commit a6efe5a

File tree

6 files changed

+323
-281
lines changed

6 files changed

+323
-281
lines changed

README.md

Lines changed: 39 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -46,73 +46,74 @@
4646

4747
<h2 align="center">Vue Router Tab</h2>
4848

49-
Vue Router Tab 是基于 `Vue Router` 的路由页签组件,用来实现多页签页面的管理。
49+
Vue Router Tab 是基于 Vue Router 的路由页签组件,用来实现多页签页面的管理。
5050

5151

52-
## 功能
52+
## 📌 功能
5353

54-
- 响应路由变化来打开或切换页签
55-
- 页签右键菜单操作
56-
- [页签规则](https://bhuh12.github.io/vue-router-tab/guide/essentials/rule.html)配置
57-
- 内置页签和页面[过渡效果](https://bhuh12.github.io/vue-router-tab/guide/advanced/transition.html),支持自定义配置
58-
- [自定义页签模板](https://bhuh12.github.io/vue-router-tab/guide/advanced/slot.html)
59-
- [初始页签数据](https://bhuh12.github.io/vue-router-tab/guide/advanced/initial-tabs.html),进入页面时默认显示的页签
60-
- [动态更新页签信息](https://bhuh12.github.io/vue-router-tab/guide/advanced/dynamic-tab-info.html) (标题/图标/提示)
61-
- [iframe 页签嵌入外部网站](https://bhuh12.github.io/vue-router-tab/guide/essentials/iframe.html)
62-
- [页签页面离开 (页签关闭/刷新/替换) 前确认](https://bhuh12.github.io/vue-router-tab/guide/advanced/page-leave.html)
63-
- [多语言支持](https://bhuh12.github.io/vue-router-tab/guide/essentials/i18n.html)
54+
✅ 响应路由变化来打开或切换页签
6455

56+
✅ 页签右键菜单操作
6557

66-
## 安装
58+
[页签规则](https://bhuh12.github.io/vue-router-tab/guide/essentials/rule.html)配置
6759

68-
### npm
60+
✅ 内置页签和页面[过渡效果](https://bhuh12.github.io/vue-router-tab/guide/advanced/transition.html),支持自定义配置
6961

70-
``` bash
71-
npm i vue-router-tab -S
72-
```
62+
[自定义页签模板](https://bhuh12.github.io/vue-router-tab/guide/advanced/slot.html)
7363

74-
### yarn (推荐)
64+
[初始页签数据](https://bhuh12.github.io/vue-router-tab/guide/advanced/initial-tabs.html),进入页面时默认显示的页签
7565

76-
``` bash
77-
yarn add vue-router-tab
78-
```
66+
[动态更新页签信息](https://bhuh12.github.io/vue-router-tab/guide/advanced/dynamic-tab-info.html) (标题/图标/提示)
7967

68+
[iframe 页签嵌入外部网站](https://bhuh12.github.io/vue-router-tab/guide/essentials/iframe.html)
69+
70+
[页签页面离开 (页签关闭/刷新/替换) 前确认](https://bhuh12.github.io/vue-router-tab/guide/advanced/page-leave.html)
71+
72+
[多语言支持](https://bhuh12.github.io/vue-router-tab/guide/essentials/i18n.html)
73+
74+
75+
## 🛠 安装
76+
77+
[https://bhuh12.github.io/vue-router-tab/guide/installation.html](https://bhuh12.github.io/vue-router-tab/guide/installation.html)
78+
79+
## 📝 文档
8080

81-
## 文档:
8281
[https://bhuh12.github.io/vue-router-tab/](https://bhuh12.github.io/vue-router-tab/)
8382

8483
- 介绍:
8584
[https://bhuh12.github.io/vue-router-tab/guide/](https://bhuh12.github.io/vue-router-tab/guide/)
8685

87-
- 安装:
88-
[https://bhuh12.github.io/vue-router-tab/guide/installation.html](https://bhuh12.github.io/vue-router-tab/guide/installation.html)
89-
9086
- 入门:
9187
[https://bhuh12.github.io/vue-router-tab/guide/essentials/](https://bhuh12.github.io/vue-router-tab/guide/essentials/)
9288

93-
## 演示:
89+
- API:
90+
[https://bhuh12.github.io/vue-router-tab/api/](https://bhuh12.github.io/vue-router-tab/api/)
91+
92+
## 📺 演示
93+
9494
[https://bhuh12.github.io/vue-router-tab/demo/](https://bhuh12.github.io/vue-router-tab/demo/)
9595

96-
## 更新日志
96+
## 📃 更新日志
97+
9798
[https://github.com/bhuh12/vue-router-tab/releases](https://github.com/bhuh12/vue-router-tab/releases)
9899

99100
---
100101

101102

102-
## NPM 任务
103+
## 🏷 NPM 任务
103104

104105
| 任务 | 命令 | 备注 |
105106
| ---- | ---- | ---- |
106-
| **插件**:构建 | `npm run lib:build` |
107-
| **插件**:构建并生成报告 | `npm run lib:build:report` |
108-
| **插件**:发布 | `npm run lib:publish` | 操作前:更改 `package.json` 中的 `version` 为新的版本号 |
109-
| **Demo**开发 | `npm run demo:dev` |
110-
| **Demo**构建 | `npm run demo:build` |
111-
| **文档**:开发 | `npm run docs:dev` |
112-
| **文档**:构建 | `npm run docs:build` |
113-
| **代码**风格:检查 | `npm run lint` |
114-
| **代码**风格:检查并修复 | `npm run lint:fix` |
115-
| **代码**:提交 | `npm run commit` |
107+
| 插件构建 | `npm run lib:build` |
108+
| 插件构建并生成报告 | `npm run lib:build:report` |
109+
| 插件发布 | `npm run lib:publish` | 操作前更改 `package.json` 中的 `version` 为新的版本号 |
110+
| Demo 开发 | `npm run demo:dev` |
111+
| Demo 构建 | `npm run demo:build` |
112+
| 文档开发 | `npm run docs:dev` |
113+
| 文档构建 | `npm run docs:build` |
114+
| 代码风格检查 | `npm run lint` |
115+
| 代码风格检查并修复 | `npm run lint:fix` |
116+
| 代码提交 | `npm run commit` |
116117

117118

118119
## License

docs/.vuepress/config.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ module.exports = {
1414
// 输出目录
1515
dest: 'dist/docs',
1616

17+
host: 'localhost',
18+
1719
// 主题配置
1820
themeConfig: {
1921
// 页头导航
@@ -54,7 +56,8 @@ module.exports = {
5456
'advanced/dynamic-tab-info',
5557
'advanced/page-leave'
5658
]
57-
}
59+
},
60+
'program',
5861
]
5962
},
6063

docs/guide/README.md

Lines changed: 28 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,28 @@
11
# 介绍
22

3-
Vue Router Tab 是基于 `Vue Router` 的路由页签组件,用来实现多页签页面的管理。
3+
Vue Router Tab 是基于 Vue.js 和 Vue Router 的路由页签组件,用来实现多页签页面的管理。
44

55
### 包含的功能
66

7-
- 响应路由变化来打开或切换页签
8-
- 页签右键菜单操作
9-
- [页签规则](essentials/rule.md)配置
10-
- 内置页签和页面[过渡效果](advanced/transition.md),支持自定义配置
11-
- [自定义页签模板](advanced/slot.md)
12-
- [初始页签数据](advanced/initial-tabs.md),进入页面时默认显示的页签
13-
- [动态更新页签信息](advanced/dynamic-tab-info.md) (标题/图标/提示)
14-
- [iframe 页签嵌入外部网站](essentials/iframe.md)
15-
- [页签页面离开 (页签关闭/刷新/替换) 前确认](advanced/page-leave.md)
16-
- [多语言支持](essentials/i18n.md)
7+
✅ 响应路由变化来打开或切换页签
8+
9+
✅ 页签右键菜单操作
10+
11+
[页签规则](essentials/rule.md)配置
12+
13+
✅ 内置页签和页面[过渡效果](advanced/transition.md),支持自定义配置
14+
15+
[自定义页签模板](advanced/slot.md)
16+
17+
[初始页签数据](advanced/initial-tabs.md),进入页面时默认显示的页签
18+
19+
[动态更新页签信息](advanced/dynamic-tab-info.md) (标题/图标/提示)
20+
21+
[iframe 页签嵌入外部网站](essentials/iframe.md)
22+
23+
[页签页面离开 (页签关闭/刷新/替换) 前确认](advanced/page-leave.md)
24+
25+
[多语言支持](essentials/i18n.md)
1726

1827

1928
### 主流多页签方案的缺陷
@@ -29,25 +38,27 @@ Vue Router Tab 是基于 `Vue Router` 的路由页签组件,用来实现多页
2938
4. 无法定制页签打开的规则
3039

3140

32-
另外还看到一种方案,是弃用 `Vue Router`,自行实现路由和缓存控制。该方案需要使用其提供的 API 来控制页签打开和切换,对于现有的 `Vue Router` 项目引入改动量比较大。
41+
另外还看到一种方案,是弃用 Vue Router,自行实现路由和缓存控制。该方案需要使用其提供的 API 来控制页签打开和切换,对于现有的 Vue Router 项目引入改动量比较大。
3342

3443
---
3544

36-
### Vue Router Tab 方案
45+
### Vue Router Tab 的优势
46+
47+
针对现存方案的各种问题,Vue Router Tab 定制开发了 `<router-alive>` 缓存组件来控制路由页面缓存(感兴趣的朋友可以看看:[问题与解决方案](program.md))。
3748

38-
针对现存方案的各种问题,`Vue Router Tab` 定制开发了 `<router-alive>` 缓存组件来控制路由页面缓存。除了解决了其他方案的不足,`Vue Router Tab` 还拥有以下优势:
49+
除了解决了其他方案的不足,Vue Router Tab 还拥有以下优势:
3950

40-
1. `Vue Router Tab` 是完全响应 `Vue Router` 路由的。使用熟悉的 `<router-link>` 或者 `router.push` 等 api 即可方便的打开和切换页签,您可以使用 `Vue Router` 的完整功能。
51+
1. Vue Router Tab 是完全响应 Vue Router 路由的。使用熟悉的 `<router-link>` 或者 `router.push` 等 api 即可方便的打开和切换页签,您可以使用 Vue Router 的完整功能。
4152

42-
2. `Vue Router Tab` 只依赖 `Vue``Vue Router` 。不会引入额外的依赖。
53+
2. Vue Router Tab 只依赖 Vue.js 和 Vue Router 。不会引入额外的依赖。
4354

4455
3. 配置简单,引入组件后通过路由的 `meta` 配置页签信息即可
4556

4657
4. 可以方便的定制页签的打开规则,精准控制路由页签
4758

4859
5. 丰富的选项提供你可能需要的额外功能和自定义配置
4960

50-
6. 提供完善的文档说明、代码示例和Demo演示
61+
6. 提供完善的文档说明、代码示例和 Demo 演示
5162

5263
---
5364

docs/guide/installation.md

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,24 @@
11
# 安装
22

3+
::: warning
4+
请确保你的 Node.js 版本 >= 8.6,旧的版本可能存在错误。
5+
:::
6+
37
### NPM
48

9+
推荐使用 yarn:
10+
511
``` bash
6-
npm install vue-router-tab
12+
yarn add vue-router-tab
713
```
814

9-
**yarn** (推荐)
15+
你也可以用 npm:
1016

1117
``` bash
12-
yarn add vue-router-tab
18+
npm i vue-router-tab -S
1319
```
1420

21+
1522
### 构建开发版
1623

1724
如果你想使用最新的开发版,就得从 GitHub 上直接 clone,然后自己 build 一个 `vue-router-tab`

docs/guide/program.md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# 方案
2+
3+
Vue Router Tab 实现过程中遇到的**问题及解决方案**,也欢迎提出更好的点子。
4+
5+
6+
1. `keep-alive` 仅支持根据组件 `name` 控制缓存,无法针对路由精确控制:
7+
8+
参考 `keep-alive` 实现 `router-alive` 组件,基于 Vue Router 路由规则的缓存控制
9+
10+
2. 页面组件强制刷新:
11+
12+
1. 销毁页面组件实例
13+
2. `router-view` 组件通过 `v-if` 隐藏,在 `nextTick` 后再显示
14+
15+
3. 由于缓存,Webpack 热加载后的页面不刷新:
16+
17+
在路由页面组件全局混入的 `activated` 钩子里,记录 `vm.$vnode.componentOptions.Ctor.cid`。如果与上一次的值不一致,则销毁页面,组件重新渲染
18+
19+
4. 当快速频繁切换页签时,页面显示空白:
20+
21+
根因:旧页面离开的过渡效果尚未完成,新页面内容来不及 mount 又被后面的路由替换
22+
23+
方案:路由切换结束后,如果路由页面节点 `nodeType` 为 8 (comment 类型),强制刷新页面组件
24+
25+
5. iframe 页面页签切换后会重新加载:
26+
27+
1.`<iframe>` 节点放在页面所在 `<router-view>` 的外层,通过 `v-show` 控制显示隐藏。
28+
29+
2. 建立 iframe 路由页面组件,通过生命周期钩子来添加、显示、隐藏、移除 `<iframe>` dom 节点
30+
31+
6. 打包后的 js 文件太庞大:
32+
33+
构建库时,配置 `babel.config.js``useBuiltIns``false`,打包时不包含 Polyfill

0 commit comments

Comments
 (0)