uni-app怎么使用路由守衛,並且路由配置和pages.json中只寫一套


背景

uni-app本身沒有路由,無法使用路由守衛。
那么有這么一個功能: 當某些頁面需要登錄,進入之前需要判斷是否登錄,如果沒有登錄則跳轉到登錄頁。
可以封裝公共方法或混入實現,但是不太優雅,這時使用路由守衛實在是太方便了!
幸好,插件uni-simple-router給我們提供了

1. uni-simple-router使用方法

uni-simple-router 是 專為 uni-app 打造的路由管理器。它保留了 Vue-router 完全相似的書寫風格,讓你 倍感親切。 讓構建單頁面應用變得易如反掌。
具體使用詳見uni-simple-router文檔

2. 從pages.js獲取配置的pages來配置路由

引入uni-simple-router后,我們要配置路由,那么問題來了,我們之前在pages.json中配置過頁面,這里又要配置路由,相當於一個頁面進行了兩次配置,太麻煩!

使用一套配置方法如下:

a. 將pages.json中的配置移入pages.js中

uni-app自帶一個webpack loader鈎子文件pages.js,在項目src目錄下建立pages.js(與pages.json同級)即可生效(pages.json仍然需要存在,內容為{}即可)。
pages.js要求CommonJS規范,直接通過module.exports輸出一個鈎子函數。

module.exports = () => ({
	"pages": [
		{
			"path": "pages/mine/index",
			"style": {
				"navigationBarTitleText": "我的",
				"navigationStyle": "custom"
			}
		},
		{
			"path": "pages/index/search,
			"style": {
				"navigationBarTitleText": "查詢"
			},
			meta: {
				needLogin: true
			}
		},
                ···
        ],
	"globalStyle": {
		···
	}
})
b. router.js中導入pages.js,基於pages進行封裝路由
import Vue from 'vue'
import store from './store'

import Router, {
	RouterMount
} from './js_sdk/hhyang-uni-simple-router/index.js'
import pages from './pages.js'

Vue.use(Router)

const myRouter =
	pages().pages.map(item => ({
		path: `/${item.path}`,
		meta: item.meta || {}
	}))
//初始化
const router = new Router({
	routes: myRouter
});

//全局路由前置守衛
router.beforeEach((to, from, next) => {
	const isLogin = store.getters.isLogin
	if (!isLogin && to.meta.needLogin) {
		next({
			path: '/pages/login/index',
			query: {
				redirect: to.path
			}
		})
	} else {
		next()
	}

})
// 全局路由后置守衛
router.afterEach((to, from) => {})
export default router;

這樣,頁面只需要在pages.js中進行配置,路由會從該文件中獲取。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM