|
4 | 4 | */ |
5 | 5 |
|
6 | 6 | class Router { |
7 | | - // 原始属性定义 |
8 | | - config = { |
9 | | - type: 'navigateTo', |
10 | | - url: '', |
11 | | - delta: 1, // navigateBack页面后退时,回退的层数 |
12 | | - params: {}, // 传递的参数 |
13 | | - animationType: 'pop-in', // 窗口动画,只在APP有效 |
14 | | - animationDuration: 300, // 窗口动画持续时间,单位毫秒,只在APP有效 |
15 | | - intercept: false, // 是否需要拦截 |
16 | | - } |
17 | | - |
18 | 7 | constructor() { |
| 8 | + // 原始属性定义 |
| 9 | + this.config = { |
| 10 | + type: 'navigateTo', |
| 11 | + url: '', |
| 12 | + delta: 1, // navigateBack页面后退时,回退的层数 |
| 13 | + params: {}, // 传递的参数 |
| 14 | + animationType: 'pop-in', // 窗口动画,只在APP有效 |
| 15 | + animationDuration: 300, // 窗口动画持续时间,单位毫秒,只在APP有效 |
| 16 | + intercept: false, // 是否需要拦截 |
| 17 | + } |
19 | 18 | // 因为route方法是需要对外赋值给另外的对象使用,同时route内部有使用this,会导致route失去上下文 |
20 | 19 | // 这里在构造函数中进行this绑定 |
21 | 20 | this.route = this.route.bind(this) |
22 | 21 | } |
23 | 22 |
|
24 | 23 | // 判断url前面是否有"/",如果没有则加上,否则无法跳转 |
25 | 24 | addRootPath(url) { |
26 | | - return String(url).indexOf('/') >= 0 ? url : `/${url}` |
| 25 | + return url[0] === '/' ? url : `/${url}` |
27 | 26 | } |
28 | 27 |
|
29 | 28 | // 整合路由参数 |
30 | 29 | mixinParam(url, params) { |
| 30 | + url = url && this.addRootPath(url) |
| 31 | + |
31 | 32 | // 使用正则匹配,主要依据是判断是否有"/","?","="等,如“/page/index/index?name=mary" |
32 | 33 | // 如果有url中有get参数,转换后无需带上"?" |
33 | 34 | let query = '' |
@@ -65,7 +66,6 @@ class Router { |
65 | 66 | mergeConfig.params = params |
66 | 67 | // 合并内外部参数 |
67 | 68 | mergeConfig = uni.$u.deepMerge(this.config, mergeConfig) |
68 | | - |
69 | 69 | // 判断用户是否定义了拦截器 |
70 | 70 | if (typeof uni.$u.routeIntercept === 'function') { |
71 | 71 | // 定一个promise,根据用户执行resolve(true)或者resolve(false)来决定是否进行路由跳转 |
|
0 commit comments