@lytjs/router 4.0.5 → 4.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/README.md +253 -0
  2. package/package.json +3 -3
package/README.md ADDED
@@ -0,0 +1,253 @@
1
+ # @lytjs/router
2
+
3
+ Lyt.js 官方路由 - 提供 History / Hash 模式、导航守卫、动态路由等能力。
4
+
5
+ ## 安装
6
+
7
+ ```bash
8
+ npm install @lytjs/router
9
+
10
+ # 或使用 pnpm
11
+ pnpm add @lytjs/router
12
+ ```
13
+
14
+ ## 特性
15
+
16
+ - 🚀 History / Hash 双模式
17
+ - 🔄 完整的导航守卫
18
+ - 📦 动态路由匹配
19
+ - 🎯 嵌套路由
20
+ - 📋 命名路由和命名视图
21
+ - 🔌 零运行时依赖
22
+
23
+ ## 快速开始
24
+
25
+ ```javascript
26
+ import { createRouter, createWebHistory } from '@lytjs/router';
27
+ import { createApp } from '@lytjs/core';
28
+ import Home from './views/Home.vue';
29
+ import About from './views/About.vue';
30
+
31
+ // 1. 定义路由
32
+ const routes = [
33
+ { path: '/', component: Home },
34
+ { path: '/about', component: About }
35
+ ];
36
+
37
+ // 2. 创建路由实例
38
+ const router = createRouter({
39
+ history: createWebHistory(),
40
+ routes
41
+ });
42
+
43
+ // 3. 创建应用并使用路由
44
+ const app = createApp(App);
45
+ app.use(router);
46
+ app.mount('#app');
47
+ ```
48
+
49
+ ## API 参考
50
+
51
+ ### 路由创建
52
+
53
+ | API | 说明 |
54
+ |------|------|
55
+ | `createRouter(options)` | 创建路由实例 |
56
+ | `createWebHistory(base)` | HTML5 History 模式 |
57
+ | `createWebHashHistory(base)` | Hash 模式 |
58
+ | `createMemoryHistory(base)` | 内存模式(测试用) |
59
+
60
+ ### 组件
61
+
62
+ | 组件 | 说明 |
63
+ |------|------|
64
+ | `<router-view>` | 路由视图出口 |
65
+ | `<router-link>` | 路由导航链接 |
66
+
67
+ ### 组合式 API
68
+
69
+ | API | 说明 |
70
+ |------|------|
71
+ | `useRouter()` | 获取路由实例 |
72
+ | `useRoute()` | 获取当前路由信息 |
73
+ | `useLink(props)` | 创建导航链接 |
74
+
75
+ ## 路由配置
76
+
77
+ ```javascript
78
+ const routes = [
79
+ {
80
+ path: '/',
81
+ name: 'home',
82
+ component: Home,
83
+ meta: { title: '首页' }
84
+ },
85
+ {
86
+ path: '/user/:id',
87
+ name: 'user',
88
+ component: User,
89
+ props: true
90
+ },
91
+ {
92
+ path: '/parent',
93
+ component: Parent,
94
+ children: [
95
+ {
96
+ path: 'child',
97
+ component: Child
98
+ }
99
+ ]
100
+ }
101
+ ];
102
+ ```
103
+
104
+ ## 导航守卫
105
+
106
+ ```javascript
107
+ // 全局前置守卫
108
+ router.beforeEach((to, from) => {
109
+ if (!isAuthenticated && to.path !== '/login') {
110
+ return '/login';
111
+ }
112
+ });
113
+
114
+ // 全局解析守卫
115
+ router.beforeResolve(async (to) => {
116
+ // 在导航被确认之前、所有组件内守卫和异步路由组件被解析之后调用
117
+ });
118
+
119
+ // 全局后置钩子
120
+ router.afterEach((to, from) => {
121
+ document.title = to.meta.title;
122
+ });
123
+ ```
124
+
125
+ ## 组件内守卫
126
+
127
+ ```javascript
128
+ import { onBeforeRouteLeave, onBeforeRouteUpdate } from '@lytjs/router';
129
+
130
+ onBeforeRouteLeave((to, from) => {
131
+ const answer = window.confirm('确定要离开吗?');
132
+ if (!answer) {
133
+ return false;
134
+ }
135
+ });
136
+
137
+ onBeforeRouteUpdate((to, from) => {
138
+ // 在当前路由改变,但是该组件被复用时调用
139
+ console.log('路由更新了');
140
+ });
141
+ ```
142
+
143
+ ## 路由元信息
144
+
145
+ ```javascript
146
+ const routes = [
147
+ {
148
+ path: '/admin',
149
+ component: Admin,
150
+ meta: { requiresAuth: true }
151
+ }
152
+ ];
153
+
154
+ router.beforeEach((to, from) => {
155
+ if (to.meta.requiresAuth && !isAuthenticated()) {
156
+ return {
157
+ path: '/login',
158
+ query: { redirect: to.fullPath }
159
+ };
160
+ }
161
+ });
162
+ ```
163
+
164
+ ## 示例
165
+
166
+ ### 编程式导航
167
+
168
+ ```javascript
169
+ import { useRouter } from '@lytjs/router';
170
+
171
+ const router = useRouter();
172
+
173
+ // 字符串路径
174
+ router.push('/users');
175
+
176
+ // 带路径的对象
177
+ router.push({ path: '/users' });
178
+
179
+ // 命名的路由
180
+ router.push({ name: 'user', params: { id: '123' } });
181
+
182
+ // 带查询参数,变成 /register?plan=private
183
+ router.push({ path: '/register', query: { plan: 'private' } });
184
+ ```
185
+
186
+ ### 获取路由信息
187
+
188
+ ```javascript
189
+ import { useRoute } from '@lytjs/router';
190
+
191
+ const route = useRoute();
192
+
193
+ console.log(route.path); // 当前路径
194
+ console.log(route.params); // 动态参数
195
+ console.log(route.query); // 查询参数
196
+ console.log(route.meta); // 元信息
197
+ ```
198
+
199
+ ### 嵌套路由
200
+
201
+ ```javascript
202
+ const routes = [
203
+ {
204
+ path: '/user/:id',
205
+ component: User,
206
+ children: [
207
+ {
208
+ // 当 /user/:id/profile 匹配成功
209
+ // UserProfile 会被渲染在 User 的 <router-view> 中
210
+ path: 'profile',
211
+ component: UserProfile
212
+ },
213
+ {
214
+ // 当 /user/:id/posts 匹配成功
215
+ // UserPosts 会被渲染在 User 的 <router-view> 中
216
+ path: 'posts',
217
+ component: UserPosts
218
+ }
219
+ ]
220
+ }
221
+ ];
222
+ ```
223
+
224
+ ### 重定向和别名
225
+
226
+ ```javascript
227
+ const routes = [
228
+ // 重定向
229
+ { path: '/home', redirect: '/' },
230
+ { path: '/home', redirect: { name: 'homepage' } },
231
+
232
+ // 别名
233
+ { path: '/', component: Home, alias: '/home' }
234
+ ];
235
+ ```
236
+
237
+ ## 性能
238
+
239
+ - 体积小,零运行时依赖
240
+ - 按需加载路由
241
+ - 高效的路径匹配算法
242
+
243
+ ## 兼容性
244
+
245
+ - Node.js >= 18.0.0
246
+ - Chrome 64+
247
+ - Firefox 63+
248
+ - Safari 12+
249
+ - Edge 79+
250
+
251
+ ## License
252
+
253
+ MIT
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lytjs/router",
3
- "version": "4.0.5",
3
+ "version": "4.2.0",
4
4
  "description": "Lyt.js 内置路由 - History/Hash 模式、导航守卫、动态路由",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.mjs",
@@ -38,8 +38,8 @@
38
38
  "hash"
39
39
  ],
40
40
  "dependencies": {
41
- "@lytjs/common": "^4.0.5",
42
- "@lytjs/reactivity": "^4.0.5"
41
+ "@lytjs/common": "^4.2.0",
42
+ "@lytjs/reactivity": "^4.2.0"
43
43
  },
44
44
  "engines": {
45
45
  "node": ">=18.0.0"