• 【从零开始搭建uniapp开发框架】(八)—— 页面跳转封装


    框架开源地址:https://gitee.com/yunhaotian/uniapp_mobileFrame

    本框架使用了分包机制,具体内容在 【从零开始搭建uniapp开发框架】(三)—— uniapp设置分包机制

    根据本框架使用了分包封装统一的页面跳转方法封装

    在 common 文件夹下新建 sju.nav.js 文件

     

    sju.nav.js源码:

    /**
     * 页面跳转的相关方法
     */
    
    import base from '@/common/sju.base.js';
    import login from '@/common/sju.login.js'
    
    /**
     * @description url地址的转换
     * <br/>pages内页面访问,参数路径规范:/页面名
     * <br/>pages内子目录中页面访问,参数路径规范:/子目录名/页面名,实际访问页面:/pages/子目录名/页面名/页面名,
     * <br/>分包页面访问,参数路径规范:/分包名/页面名,实际访问页面:/sub_分包名/pages/页面名/页面名
     */
    function tranferUrl(url) {
    	//地址和参数分离
    	let para = '';
    	if (url.indexOf('?')) {
    		let arrPara = url.split('?');
    		url = arrPara[0];
    		para = arrPara[1];
    	}
    	//获取页面名称
    	let arrPath = url.split('/');
    	let fileName = arrPath[arrPath.length - 1];
    	//处理路径
    	let count = url.split('/').length;
    	let result;
    	if (count == 2) {
    		//pages内页面访问
    		result = "/pages/";
    	}
    	if (count == 3) {
    		if (url.indexOf('tab') > 0) {
    			//tab页面
    			result = "/pages/tab/";
    		} else {
    			//分包页面
    			let path = arrPath[1];
    			result = "/sub_" + path + "/pages/";
    		}
    	}
    	//拼接页面名称
    	result += fileName + "/" + fileName;
    	//拼接参数
    	if (base.isNotNull(para))
    		result += "?" + para;
    	//输出结果
    	base.logInfo('tranferUrl:' + result);
    	return result;
    }
    
    let nav = {
    	/**
    	 * @description 保留当前页面,跳转到应用内的某个页面,使用uni.navigateBack可以返回到原页面。
    	 * @param {string} url 跳转的地址
    	 */
    	navigateTo: function(url) {
    		// 判断打开页面是否需要登录
    		if (login.checkLogin(url)) {
    			url = tranferUrl(url);
    			uni.navigateTo({
    				url: url,
    				fail: function() {
    					base.logInfo('navigateTo 失败');
    				}
    			})
    		}
    	},
    	/**
    	 * @description 关闭当前页面,跳转到应用内的某个页面。
    	 * @param {sting} url 跳转的地址
    	 * @param {string} para 页面参数
    	 */
    	redirectTo: function(url) {
    		// 判断打开页面是否需要登录
    		if (login.checkLogin(url)) {
    			url = tranferUrl(url);
    			uni.redirectTo({
    				url: url,
    				fail: function() {
    					base.logInfo('navigateTo 失败');
    				}
    			});
    		}
    	},
    	/**
    	 * @description 关闭所有页面,打开到应用内的某个页面。
    	 * @param {sting} url 跳转的地址
    	 * @param {string} para 页面参数
    	 */
    	reLaunch: function(url) {
    		// 判断打开页面是否需要登录
    		if (login.checkLogin(url)) {
    			url = tranferUrl(url);
    			uni.reLaunch({
    				url: url,
    
    				fail: function() {
    					base.logInfo('reLaunch 失败')
    				}
    			})
    		}
    	},
    	/**
    	 * @description 跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面。
    	 * @param {sting} url 跳转的地址
    	 */
    	switchTab: function(url) {
    		if (login.checkLogin(url)) {
    			url = tranferUrl(url);
    			uni.switchTab({
    				url: url,
    				fail: function() {
    					base.logInfo('switchTab 失败')
    				}
    			})
    		}
    	},
    	/**
    	 * @description 关闭当前页面,返回上一页面或多级页面。可通过 getCurrentPages() 获取当前的页面栈,决定需要返回几层。
    	 * @param {number} delta 返回的页面数
    	 */
    	navigateBack: function(delta) {
    		uni.navigateBack({
    			delta: delta
    		});
    	}
    }
    export default nav;
    

    main.js引入封装类代码:

    import sjuNav from './common/sju.nav.js'
    
    Vue.prototype.sjuNav = sjuNav;
    

    页面使用:

    this.sjuNav.navigateTo('/my/list')
    
  • 相关阅读:
    img标签与span一起使用不在同一条线上
    媒体查询
    section标签实现文字滚动
    js活jQuery实现动态添加、移除css/js文件
    页面中动态改变浏览器标题
    css清浮动与动态计算元素宽度
    js实现60s倒计时效果
    js与es6中获取时间戳
    JavaScript中实现小数点后保留2位
    GMT时间转换
  • 原文地址:https://www.cnblogs.com/Intellectualscholar/p/15891329.html
Copyright © 2020-2023  润新知