uniapp封装路由,使用路由名称跳转

在这里插入图片描述

使用uniapp时,个人感觉有个很不友好的点:当项目比较复杂且文件夹分的比较细时,跳转路由书写代码时会有很长的一行路由代码;(强迫症)
比如:/home/project/list/cate/detail
为解决这个问题,封装了一套使用路由名称作为跳转路由的方法(类似于Vue路由)

1. 创建新页面
创建一个新页面之后,在pages.json文件里pages对应的页面配置里添加 routeName 字段(自定义)

pages.json配置

分包路由(subPackages)同理

在这里插入图片描述

2. 封装函数
新建route文件夹,再创建index.js 和 router.js 文件

文件夹目录

在router.js文件里引入pages.json,拿到页面路由配置,处理成路由集合
格式: { 	
 	home_index: "/pages/home/index/index",
 	user_index: "/pages/user/index/index"
}

key是pages.json里配置的routeName,value是对应的路由链接

实现代码如下:

const defaultPages = require('@/pages.json')
const {
	pages,
	subPackages
} = defaultPages.default

function getRouters() {
	const _routes = {}
	pages.forEach(item => {
		_routes[item.routeName] = `/${item.path}`
	})
	subPackages.forEach(subPackage=>{
		subPackage.pages.forEach(item=>{
			_routes[item.routeName] = `/${subPackage.root}/${item.path}`
		})
	})
	
	return _routes
}

export default getRouters()
在index.js文件里引入router.js,拿到路由集合,处理路由并合并参数,最后实现跳转
import routers from './router';

/**
 * 路由跳转
 * @param name 页面路由名称
 * @param type 跳转方式
 * @param params 携带参数
 * @param delta 页面返回层级,仅 type='navigateBack' || type='back' 时生效
 */
function customRoute(config) {
	let _routeName = typeof config === 'string' ? config : config.name
	let _params = typeof config === 'string' ? {} : config.params || {}
	let _type = typeof config === 'string' ? 'navigateTo' : config.type || 'navigateTo'
	let _url = mixinParam(routers[_routeName], _params)

	if (_type === 'navigateTo' || _type === 'to') {
		uni.navigateTo({ url: _url })
	}
	if (_type === 'redirectTo' || _type === 'redirect') {
		uni.redirectTo({ url: _url })
	}
	if (_type === 'switchTab' || _type === 'tab') {
		uni.switchTab({ url: _url })
	}
	if (_type === 'reLaunch' || _type === 'launch') {
		uni.reLaunch({ url: _url })
	}
	if (_type === 'navigateBack' || _type === 'back') {
		uni.navigateBack({ delta: _params.delta || 1 })
	}
}

export default customRoute

处理路由参数
function mixinParam(url, params) {
	let query = ''
	if (/.*\/.*\?.*=.*/.test(url)) {
		query = uni.$u.queryParams(params, false)
		return url += `&${query}`
	}
	query = uni.$u.queryParams(params)
	return url += query
}
4. 使用函数跳转
先挂载到Vue实例
import customRoute from '@/route'
Vue.prototype.$routeTo = customRoute
跳转方式一:
this.$routeTo({
	name: 'user_index',   // 须在pages.json配置routeName
	type: 'navigateTo',  // 非必填,跳转类型
	params: {            // 非必填,携带参数
		id: 12,
		name: 'jack'
	}
})
	
跳转方式二:
// 跳转
this.$routeTo('user_data')
// 返回上一级页面
this.$routeTo({type: 'back'})

如果觉得有用随手点个赞吧,谢谢
关注我,不定时分享技术干货~

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

z.week

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值