Blame view

ceres-uniapp-master/uview-ui/libs/function/route.js 2.79 KB
3f535f30   杨鑫   '初始'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
  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;