微信小程序路由跳转封装

1.小程序根目录utils文件夹创建route.js文件

创建router.js文件对跳转页面路径统一管理,跳转时传入对应路径的key值即可

export default {
  'login':'/pages/login/login', // 登录页面
  'register':'/pages/register/register', // 注册页面
  'index':'/pages/index/index', // 主页
  'ForgotPassword':'/pages/ForgotPassword/ForgotPassword', //  忘记密码
  'menuPage':'/pages/menuPage/menuPage', //  菜单选择页面
}

2.同样在utils文件夹创建navigate.js文件,对微信页面跳转api进行封装

//  这里引入第一步创建的route.js文件
import route from './route'
// 封装路由方法
  /** 
   * function
   * @param {string} url 目标页面的路由
   * @param {Object} param 传递给目标页面的参数
   * @param {number} time 延时跳转,默认不延时
   * @description  处理目标页面的参数,转成json字符串传递给param字段,在目标页面通过JSON.parse(options.param)接收 保留当前页面,跳转到应用内的某个页面
   */  
  export function navigateTo(url,param={},time=0){
  //  对参数进行处理
    if(param!=={}){
      route[url]+=`?param=${JSON.stringify(param)}`
    }
    setTimeout(()=>{ //  延时跳转处理默认不延时
      wx.navigateTo({
        url:route[url], //  根据传递过来的key值从route.js文件去除对应路径
        fail(err) {
          console.log('navigateTo跳转出错',err)  
        },
      })
    },time)
  }


   /** 
   * function
   * @param {string} url 目标页面的路由
   * @param {Object} param 传递给目标页面的参数,只有页面栈无目标页面调用navigateTo时,参数才会生效,单单返回不能设置参数
   * @param {number} time 延时跳转,默认不延时
   * @description  先取出页面栈,页面栈最多十层,判断目标页面是否在页面栈中,如果在,则通过目标页的位置,返回到目标页面,否则调用navigateTo方法跳转到目标页
   */   
	export function  navigateBack(url,param={},time=0){
		let _url=route[url]
    const pagesList = getCurrentPages()
    let index =  pagesList.findIndex(e=>{
      return _url.indexOf(e.route)>=0
    })
    if(index == -1){  // 没有在页面栈中,可以调用navigateTo方法
      navigateTo(url,param,time)
    }else{
     setTimeout(()=>{
      wx.navigateBack({
        delta: pagesList.length-1-index,
        fail(err){
          console.log('navigateBack返回出错',err)
        }
      })
     },time)
    }
  }


	export function  switchTab(url){ // 封装switchTab,switchTab不能有参数 
    wx.switchTab({
      url:route[url]
    })
  }
	export function  redirectTo(url,param={},time=0){ // 封装redirectTo,和navigateTo没啥区别
    if(param){
      route[url]+=`?param=${JSON.stringify(param)}`
    }
    setTimeout(()=>{
      wx.redirectTo({
        url:route[url],
        fail(err) {
          console.log('redirectTo跳转出错',err)  
        },
      })
    },time)
  }
	export function  reLaunch(url,param={}){ // 关闭所有页面,打开到应用内的某个页面。
    if(param){
      route[url]+=`?param=${JSON.stringify(param)}`
    }
    wx.reLaunch({
      url:route[url],
      fail(err) {
        console.log('reLaunch跳转出错',err)  
      },
    })
  }

页面使用示例,以登录页面为例

//获取应用实例
const app = getApp();
import { navigateTo, redirectTo } from '../../utils/navigate'
Page({

	/**
	 * 页面的初始数据
	 */
	data: {
		statusBarHeight: app.globalData.statusBarHeight, //导航栏的高度
		versions: app.globalData.versions, //  版本号
		phone: '', //  手机号
		password: '', //  密码
		errorPhone: '', //  手机错误提示
		errorPssword: '', //  密码错误提示
	},

	/**
	 * 生命周期函数--监听页面加载
	 */
	onLoad: function (options) {
	},
	//  登录请求
	async getLogin(params,type='default') {
		let res = await login(params)
		if (res.code !== 1000) {
		   //  处理登录失败逻辑
			return
		}
		message.toast('登录成功!', 'success')
		_setStorage('permissions', res.data)
		//  跳转主页 延时2秒
		redirectTo('index', {}, 2000)
	},
	//  进入注册页面
	register() {
	//  跳转到注册页面
		navigateTo('register')
	},
	//  进入忘记密码页面
	ForgotPassword() {
		navigateTo('ForgotPassword', { phone: phone })
	},
})

这里跳转进行延时操作是因为小程序中一跳转toast提示会没有显示的机会,比如登录界面我们往往需要登录成功之后给用户弹出一个成功提示再进行相应的跳转,如果不延时跳转的话,提示toast刚出现立马进行跳转操作会出现提示toast在页面闪现的状况。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值