wot-router-usage
2
总安装量
2
周安装量
#69426
全站排名
安装命令
npx skills add https://github.com/wot-ui/wot-starter --skill wot-router-usage
Agent 安装分布
openclaw
2
claude-code
2
github-copilot
2
codex
2
kimi-cli
2
gemini-cli
2
Skill 文档
@wot-ui/router ä½¿ç¨æå
ä¸ä¸º uni-app 设计çè½»é级路ç±åºï¼æä¾ç±»ä¼¼ Vue Router ç APIã
æ ¸å¿ç¹æ§
- ð ç¼ç¨å¼å¯¼èª
- ð åæ°ä¼ éï¼params + queryï¼
- ð¡ï¸ 导èªå®å«
- ð è·¯ç±ä¿¡æ¯è·å
- ð¯ TypeScript æ¯æ
è·¯ç±é ç½®
// src/router/index.ts
import { pages, subPackages } from 'virtual:uni-pages'
function generateRoutes() {
const routes = pages.map((page) => ({
...page,
path: `/${page.path}`,
}))
subPackages?.forEach((sub) => {
sub.pages.forEach((page) => {
routes.push({
...page,
path: `/${sub.root}/${page.path}`,
})
})
})
return routes
}
const router = createRouter({
routes: generateRoutes(),
})
export default router
åºç¡å¯¼èª
const router = useRouter()
const route = useRoute()
// å符串路å¾
router.push('/pages/detail/index')
// 对象形å¼
router.push({ path: '/pages/detail/index' })
// å½åè·¯ç±
router.push({ name: 'detail' })
// æ¿æ¢å½å页é¢
router.replace({ name: 'login' })
// è¿åä¸ä¸é¡µ
router.back()
// è¿åå¤çº§
router.go(-2)
åæ°ä¼ é
Query åæ°
// 跳转
router.push({
name: 'detail',
query: { id: '123', type: 'product' },
})
// è·å
const route = useRoute()
const id = route.query.id
const type = route.query.type
Params åæ°
// 跳转
router.push({
name: 'detail',
params: { id: '123' },
})
// è·å
const route = useRoute()
const id = route.params.id
导èªå®å«
å ¨å±åç½®å®å«
router.beforeEach((to, from, next) => {
console.log(`导èª: ${from.path} â ${to.path}`)
// æéæ£æ¥
if (to.meta?.requiresAuth && !isLoggedIn()) {
next({ name: 'login' })
return
}
// 弿¥å®å«
if (to.name === 'protected') {
return new Promise((resolve) => {
showConfirm({
title: '确认访é®',
success: () => { next(); resolve() },
fail: () => { next(false); resolve() },
})
})
}
next()
})
å ¨å±åç½®é©å
router.afterEach((to, from) => {
console.log(`页é¢åæ¢å®æ: ${to.path}`)
// 页é¢ç»è®¡
trackPageView(to.path)
})
è·¯ç±ä¿¡æ¯
const route = useRoute()
// å½åè·¯å¾
route.path // '/subPages/detail/index'
// è·¯ç±åç§°
route.name // 'detail'
// æ¥è¯¢åæ°
route.query // { id: '123' }
// è·¯å¾åæ°
route.params // { id: '123' }
// 宿´è·¯å¾
route.fullPath // '/subPages/detail/index?id=123'
// è·¯ç±å
ä¿¡æ¯
route.meta // { requiresAuth: true }
页é¢å®ä¹
<script setup lang="ts">
definePage({
name: 'detail', // è·¯ç±åç§°
layout: 'default', // å¸å±
meta: {
requiresAuth: true, // èªå®ä¹å
ä¿¡æ¯
},
style: {
navigationBarTitleText: '详æ
',
},
})
</script>
TabBar 页é¢è·³è½¬
// TabBar 页é¢ä½¿ç¨ reLaunch
router.push({
name: 'home',
reLaunch: true, // æèªå¨è¯å« tabBar 页é¢
})
注æäºé¡¹
- uni-app è·¯ç±éå¶ä»ç¶åå¨ï¼å¦é¡µé¢æ éå¶ï¼
- TabBar 页é¢éè¦ç¹æ®å¤ç
- 导èªå®å«ä¸ç弿¥æä½éè¦è¿å Promise
- åæ°è¿é¿æ¶èè使ç¨å ¨å±ç¶æä¼ é