From 23ef77c2b2b14a540591aa29a3354637df957964 Mon Sep 17 00:00:00 2001 From: zhaoss Date: Wed, 20 Apr 2022 16:14:07 +0800 Subject: [PATCH] =?UTF-8?q?2.2.6=E5=B0=8F=E8=8A=82=E4=B9=A0=E9=A2=98?= =?UTF-8?q?=E3=80=81=E5=85=B3=E9=94=AE=E5=AD=97=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config.json" | 17 +++ .../exercises.json" | 7 + .../exercises.md" | 129 ++++++++++++++++++ 3 files changed, 153 insertions(+) create mode 100644 "data/2.Vue\344\270\255\351\230\266/2.Vue-router/6.\350\267\257\347\224\261\351\207\215\345\256\232\345\220\221\345\222\214\345\210\253\345\220\215/config.json" create mode 100644 "data/2.Vue\344\270\255\351\230\266/2.Vue-router/6.\350\267\257\347\224\261\351\207\215\345\256\232\345\220\221\345\222\214\345\210\253\345\220\215/exercises.json" create mode 100644 "data/2.Vue\344\270\255\351\230\266/2.Vue-router/6.\350\267\257\347\224\261\351\207\215\345\256\232\345\220\221\345\222\214\345\210\253\345\220\215/exercises.md" diff --git "a/data/2.Vue\344\270\255\351\230\266/2.Vue-router/6.\350\267\257\347\224\261\351\207\215\345\256\232\345\220\221\345\222\214\345\210\253\345\220\215/config.json" "b/data/2.Vue\344\270\255\351\230\266/2.Vue-router/6.\350\267\257\347\224\261\351\207\215\345\256\232\345\220\221\345\222\214\345\210\253\345\220\215/config.json" new file mode 100644 index 0000000..9f18dcb --- /dev/null +++ "b/data/2.Vue\344\270\255\351\230\266/2.Vue-router/6.\350\267\257\347\224\261\351\207\215\345\256\232\345\220\221\345\222\214\345\210\253\345\220\215/config.json" @@ -0,0 +1,17 @@ +{ + "node_id": "vue-1dc4d9ad634f4b2ab0fbae0dd628789e", + "keywords": [ + "路由重定向和别名", + "路由重定向", + "别名" + ], + "children": [], + "export": [ + "exercises.json" + ], + "keywords_must": [ + "Vue", + "路由" + ], + "keywords_forbid": [] +} \ No newline at end of file diff --git "a/data/2.Vue\344\270\255\351\230\266/2.Vue-router/6.\350\267\257\347\224\261\351\207\215\345\256\232\345\220\221\345\222\214\345\210\253\345\220\215/exercises.json" "b/data/2.Vue\344\270\255\351\230\266/2.Vue-router/6.\350\267\257\347\224\261\351\207\215\345\256\232\345\220\221\345\222\214\345\210\253\345\220\215/exercises.json" new file mode 100644 index 0000000..1670ca2 --- /dev/null +++ "b/data/2.Vue\344\270\255\351\230\266/2.Vue-router/6.\350\267\257\347\224\261\351\207\215\345\256\232\345\220\221\345\222\214\345\210\253\345\220\215/exercises.json" @@ -0,0 +1,7 @@ +{ + "type": "code_options", + "author": null, + "source": "exercises.md", + "notebook_enable": false, + "exercise_id": "17442c8cb5f14f6fa39fc55f4700563c" +} \ No newline at end of file diff --git "a/data/2.Vue\344\270\255\351\230\266/2.Vue-router/6.\350\267\257\347\224\261\351\207\215\345\256\232\345\220\221\345\222\214\345\210\253\345\220\215/exercises.md" "b/data/2.Vue\344\270\255\351\230\266/2.Vue-router/6.\350\267\257\347\224\261\351\207\215\345\256\232\345\220\221\345\222\214\345\210\253\345\220\215/exercises.md" new file mode 100644 index 0000000..c92d28a --- /dev/null +++ "b/data/2.Vue\344\270\255\351\230\266/2.Vue-router/6.\350\267\257\347\224\261\351\207\215\345\256\232\345\220\221\345\222\214\345\210\253\345\220\215/exercises.md" @@ -0,0 +1,129 @@ +# 路由重定向和别名 + +
小常识:
+
+ +**重定向** +重定向也是通过 routes 配置来完成,下面例子是从 `/home` 重定向到 `/`: + +```javascript +const routes = [{ path: '/home', redirect: '/' }] +``` + +重定向的目标也可以是一个命名的路由: + +```javascript +const routes = [{ path: '/home', redirect: { name: 'homepage' } }] +``` + +甚至是一个方法,动态返回重定向目标: + +```javascript +const routes = [ + { + // /search/screens -> /search?q=screens + path: '/search/:searchText', + redirect: to => { + // 方法接收目标路由作为参数 + // return 重定向的字符串路径/路径对象 + return { path: '/search', query: { q: to.params.searchText } } + }, + }, + { + path: '/search', + // ... + }, +] +``` + +请注意,导航守卫并没有应用在跳转路由上,而仅仅应用在其目标上。在上面的例子中,在 /home 路由中添加 beforeEnter 守卫不会有任何效果。 + +在写 redirect 的时候,可以省略 component 配置,因为它从来没有被直接访问过,所以没有组件要渲染。唯一的例外是嵌套路由:如果一个路由记录有 children 和 redirect 属性,它也应该有 component 属性。 + +**相对重定向** +也可以重定向到相对位置: + +```javascript +const routes = [ + { + path: '/users/:id/posts', + redirect: to => { + // 方法接收目标路由作为参数 + // return 重定向的字符串路径/路径对象 + }, + }, +] +``` + +**别名** +重定向是指当用户访问 `/home` 时,URL 会被 `/` 替换,然后匹配成 `/`。那么什么是别名呢? + +将 `/` 别名为 `/home`,意味着当用户访问 /home 时,URL 仍然是 `/home`,但会被匹配为用户正在访问 /。 + +上面对应的路由配置为: + +```javascript +const routes = [{ path: '/', component: Homepage, alias: '/home' }] +``` + +通过别名,你可以自由地将 UI 结构映射到一个任意的 URL,而不受配置的嵌套结构的限制。使别名以 / 开头,以使嵌套路径中的路径成为绝对路径。你甚至可以将两者结合起来,用一个数组提供多个别名: + +```javascript +const routes = [ + { + path: '/users', + component: UsersLayout, + children: [ + // 为这 3 个 URL 呈现 UserList + // - /users + // - /users/list + // - /people + { path: '', component: UserList, alias: ['/people', 'list'] }, + ], + }, +] +``` + +如果你的路由有参数,请确保在任何绝对别名中包含它们: + +```javascript +const routes = [ + { + path: '/users/:id', + component: UsersByIdLayout, + children: [ + // 为这 3 个 URL 呈现 UserDetails + // - /users/24 + // - /users/24/profile + // - /24 + { path: 'profile', component: UserDetails, alias: ['/:id', ''] }, + ], + }, +] +``` + +关于 SEO 的注意事项: 使用别名时,一定要定义规范链接. + +
+ +
小测试:
+ +根据上方资料,以下关于路由重定向的说法不正确的是?

+ +## 答案 + +重定向不可以使用相对位置 + +## 选项 + +### A + +利用redirect进行重定向 + +### B + +在写 redirect 的时候,可以省略 component 配置 + +### C + +使用 alias 进行别名的设置 -- GitLab