记录uniapp路由跳转封装

1、建一个util.js文件

/**
 * 跳转到指定页面url
 * 支持tabBar页面
 * @param {string}  url   页面路径
 * @param {object}  query 页面参数
 * @param {string}  modo  跳转类型(默认navigateTo)
 */
export const navTo = (url, query = {}, mode = 'navigateTo') => {
	if (!url || url.length == 0) {
		return false
	}
	// tabBar页面, 使用switchTab
	if (inArray(url, getTabBarLink())) {
		uni.switchTab({
			url: `/${url}`
		})
		return true
	}
	// 生成query参数
	const querySrc = !isEmpty(query) ? `?${urlEncode(query)}` : ''
	// 普通页面跳转,使用navigateTo
	mode === 'navigateTo' && uni.navigateTo({
		url: `/${url}${querySrc}`
	})
	// 特殊指定,使用redirectTo
	mode === 'redirectTo' && uni.redirectTo({
		url: `/${url}${querySrc}`
	})
}

/**
 * 判断是否为空对象
 * @param {*} object 源对象
 */
export const isEmptyObject = (object) => {
	return Object.keys(object).length === 0
}

/**
 * 判断是否为数组
 *@param {*} array
 */
export const isArray = (array) => {
	return Object.prototype.toString.call(array) === '[Object Array]'
}

/**
 * 判断是否为对象
 *@param {*} Obejct
 */
export const isObject = (object) => {
	return Object.prototype.toString.call(object) === '[Object Obejct]'
}

/**
 * 判断是否为空
 * @param {*} object 源对象
 */
export const isEmpty = (value) => {
	if (isArray(value)) {
		return value.length === 0
	}
	if (isObject(value)) {
		return isEmptyObject(value)
	}
	return !value
}

/**
 * 对象转URL参数格式
 * {id:111,name:'xxx'} 转为 ?id=111&name=xxx
 * @param {object} obj
 */
export const urlEncode = (obj = {}) => {
	const result = []
	for (var key in obj) {
		let item = obj[key]
		if (!item) {
			continue
		}
		if (isArray(item)) {
			item.forEach(i => {
				result.push(`${key}=${i}`)
			})
		} else {
			result.push(`${key}=${item}`)
		}
	}
	return result.join('&')
}
/**
 * 是否在数组内
 */
export const inArray = (search, array) => {
	for (var i in array) {
		if (array[i] == search) return true
	}
	return false
}

2、在main.js中全局挂载

import Vue from 'vue'
import App from './App'
import store from './store'


//引入路由跳转方法
import { navTo } from './common/util.js'
// 全局挂载
Vue.prototype.$navTo = navTo

Vue.config.productionTip = false
App.mpType = 'app'

Vue.prototype.$store = store
const app = new Vue({
	...App,
	store
})
app.$mount()

3、在页面中使用

goGridDetail(item) {
				// uni.switchTab({
				// 	url: '/pages/classify/classify'
				// })
				this.$navTo('pages/classify/classify')
			}


goClassifyDetail(detail) {
				console.log("detail",detail)
				// uni.navigateTo({
				// 	// openId=13216484256&id=1009024
				// 	url: "/pages/classify/classifyDetail?openId=13216484256&id="+detail.id
				// })
				this.$navTo('pages/classify/classifyDetail',{openId:13216484256,id:detail.id})
			}

这样就ok啦!!!!

参考萤火商城v2.0开源版 [uni-app端]:git@gitee.com:xany/yoshop2.0-uniapp.git

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
uniapp中,可以通过在App.vue文件的onLaunch方法中添加拦截器来监听全局路由跳转。具体的实现步骤如下: 1. 在onLaunch方法中添加uni.addInterceptor方法,用于监听不同类型的路由跳转事件。例如,可以使用uni.addInterceptor('navigateTo')来监听页面跳转事件,使用uni.addInterceptor('switchTab')来监听tabBar跳转事件,使用uni.addInterceptor('navigateBack')来监听返回事件等。 2. 在每个拦截器的success回调函数中,调用watchRouter方法来处理路由跳转事件。在watchRouter方法中,可以编写自己的逻辑代码,例如打印日志或执行其他操作。 下面是一个示例代码: ``` onLaunch: function() { let that = this; uni.addInterceptor('navigateTo', { success(e) { that.watchRouter(); } }) uni.addInterceptor('switchTab', { success(e) { that.watchRouter(); } }) uni.addInterceptor('navigateBack', { success(e) { that.watchRouter(); } }) }, methods: { watchRouter(){ console.log('路由进行跳转'); // 在这里可以编写自己的逻辑代码 }, } ``` 通过以上步骤,就可以在uniapp中监听全局路由跳转事件了。当页面发生跳转时,watchRouter方法会被调用,并执行相应的逻辑代码。\[1\]\[3\] #### 引用[.reference_title] - *1* [uniapp切换路由监听导航跳转(在监听网络状态时非常常用)](https://blog.csdn.net/weixin_53339757/article/details/128475865)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [【uniapp小程序】路由跳转navigator传参封装](https://blog.csdn.net/qq_49002903/article/details/127904723)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值