| import queryParams from '../../libs/function/queryParams.js'; |
| /** |
| * 路由跳转 |
| * 注意:本方法没有对跳转的回调函数进行封装 |
| */ |
| function route(options = {}, params = false) { |
| let config = { |
| type: 'navigateTo', |
| url: '', |
| delta: 1, // navigateBack页面后退时,回退的层数 |
| params: {}, // 传递的参数 |
| animationType: 'pop-in', // 窗口动画,只在APP有效 |
| animationDuration: 300, // 窗口动画持续时间,单位毫秒,只在APP有效 |
| }; |
| config = Object.assign(config, options); |
| // 如果url没有"/"开头,添加上,因为uni的路由跳转需要"/"开头 |
| if (config.url[0] != '/') config.url = '/' + config.url; |
| // 判断是否有传递显式的参数,Object.keys转为数组并判断长度,switchTab类型时不能携带参数 |
| if (Object.keys(config.params).length && config.type != 'switchTab') { |
| // 判断用户传递的url中,是否带有参数 |
| // 使用正则匹配,主要依据是判断是否有"/","?","="等,如“/page/index/index?name=mary" |
| // 如果有url中有get参数,转换后无需带上"?" |
| let query = ''; |
| if (/.*\/.*\?.*=.*/.test(config.url)) { |
| // object对象转为get类型的参数 |
| query = queryParams(config.params, false); |
| // 因为已有get参数,所以后面拼接的参数需要带上"&"隔开 |
| config.url += "&" + query; |
| } else { |
| query = queryParams(config.params); |
| config.url += query; |
| } |
| } |
| // 简写形式,把url和参数拼接起来 |
| if (typeof options === 'string' && typeof params == 'object') { |
| let query = ''; |
| if (/.*\/.*\?.*=.*/.test(options)) { |
| // object对象转为get类型的参数 |
| query = queryParams(params, false); |
| // 因为已有get参数,所以后面拼接的参数需要带上"&"隔开 |
| options += "&" + query; |
| } else { |
| query = queryParams(params); |
| options += query; |
| } |
| } |
| // 判断是否一个字符串,如果是,直接跳转(简写法) |
| // 如果是中情形,默认第二个参数为对象形式的参数 |
| if (typeof options === 'string') { |
| if (options[0] != '/') options = '/' + options; |
| return uni.navigateTo({ |
| url: options |
| }); |
| } |
| // navigateTo类型的跳转 |
| if (config.type == 'navigateTo' || config.type == 'to') { |
| return uni.navigateTo({ |
| url: config.url, |
| animationType: config.animationType, |
| animationDuration: config.animationDuration, |
| }); |
| } |
| if (config.type == 'redirectTo' || config.type == 'redirect') { |
| return uni.redirectTo({ |
| url: config.url, |
| }); |
| } |
| if (config.type == 'switchTab' || config.type == 'tab') { |
| return uni.switchTab({ |
| url: config.url, |
| }); |
| } |
| if (config.type == 'reLaunch') { |
| return uni.reLaunch({ |
| url: config.url |
| }); |
| } |
| if (config.type == 'navigateBack' || config.type == 'back') { |
| return uni.navigateBack({ |
| delta: parseInt(config.delta ? config.delta : this.delta) |
| }); |
| } |
| } |
| |
| export default route; |