当前位置:   article > 正文

Vue-router之配置

routes 的 meta的headerdata

new Router 配置项

mode

hash / histoty

配置路由 history 模式

作为有服务端渲染的应用,不希望有 #,上述是 hash 模式,# 更多是用来做定位的,同时它不会被搜索引擎解析,导致网站 SEO 效果不好

在 router options 中使用 mode: 'history'

  1. export default () => {
  2. return new Router({
  3. routes,
  4. mode: 'history' // 默认 hash 模式
  5. })
  6. }
  7. 复制代码

base

页面基础路径

设置之后,使用 vue-router api 进行跳转 都会加上这个 base 路径

  1. export default () => {
  2. return new Router({
  3. routes,
  4. mode: 'history',
  5. base: '/base/' // 两边斜杠要加
  6. })
  7. }
  8. 复制代码

linkActiveClass 和 linkExactActiveClass

  1. // app.vue
  2. <template>
  3. <div id="app">
  4. <router-link to="/app">app</router-link>
  5. <router-link to="/login">login</router-link>
  6. <router-view />
  7. </div>
  8. </template>
  9. 复制代码

此时,控制台对应的 a标签显示

  1. <a data-v-06ebb29e="" href="/base/app" class="router-link-exact-active router-link-active">app</a>
  2. 复制代码

对 class 进行配置

  1. // router.js
  2. export default () => {
  3. return new Router({
  4. routes,
  5. mode: 'history',
  6. base: '/base/',
  7. linkActiveClass: 'active-link',
  8. linkExactActiveClass: 'exact-active-link'
  9. })
  10. }
  11. 复制代码

配置之后的 a 的 class,就是配置的值。

  1. <a data-v-06ebb29e="" href="/base/app" class="exact-active-link active-link">app</a>
  2. 复制代码
区别

添加一个新路由 /login/exact

  1. // client/config/routes.js
  2. export default [
  3. {
  4. path: '/login',
  5. component: Login
  6. },
  7. {
  8. path: '/login/exact',
  9. component: Login
  10. }
  11. ]
  12. 复制代码
  1. // client/app.vue
  2. <template>
  3. <div id="app">
  4. <router-link to="/login">login</router-link>
  5. <router-link to="/login/exact">login exact</router-link>
  6. </div>
  7. </template>
  8. 复制代码

点击 login 链接时,跳转到 login 页面,此时 login 和 login exact 链接标签,login 有两个 class

  1. <a data-v-06ebb29e="" href="/base/login" class="exact-active-link active-link">login</a>
  2. <a data-v-06ebb29e="" href="/base/login/exact" class="">login exact</a>
  3. 复制代码

点击 login exact 链接时,此时 login 和 login exact 链接标签,login 有一个 class,login exact 有两个 class

  1. <a data-v-06ebb29e="" href="/base/login" class="active-link">login</a>
  2. <a data-v-06ebb29e="" href="/base/login/exact" class="exact-active-link active-link">login exact</a>
  3. 复制代码

vue-router 认为只有路由真正匹配时,才会加上 exact-active-link 这个 class,如果只有一部分重合,就会加上 active-link。

scrollBehavior

页面跳转后,页面是否滚动。

  1. // router.js
  2. export default () => {
  3. return new Router({
  4. scrollBehavior (to, from, savedPostion) {
  5. if (savedPostion) {
  6. return savedPostion
  7. } else {
  8. return { x: 0, y: 0 }
  9. }
  10. }
  11. })
  12. }
  13. 复制代码

parseQuery 和 stringifyQuery

定制 query 信息

vue 会默认处理,如果有特定需求,可以借助这两个配置项。

  1. // router.js
  2. export default () => {
  3. return new Router({
  4. parseQuery (query) {},
  5. stringifyQuery (obj) {}
  6. })
  7. }
  8. 复制代码

fallback

不是所有浏览器都支持前端路由的方式,如果不支持,设置 fallback: true,vue 会自动 fallback 到 hash 模式。

路由配置

路由命名 name

name 和 path 可以没有关系,可以通过 name 来进行路由的跳转。

没使用之前

  1. // client/config/routes.js
  2. export default [
  3. {
  4. path: '/app',
  5. component: Todo
  6. }
  7. ]
  8. // app.vue
  9. <template>
  10. <div id="app">
  11. <router-link to="/app">app</router-link>
  12. </div>
  13. </template>
  14. 复制代码

使用后,效果和使用路径相同。

  1. // client/config/routes.js
  2. export default [
  3. {
  4. path: '/app',
  5. component: Todo,
  6. name: 'app'
  7. }
  8. ]
  9. // app.vue
  10. <template>
  11. <div id="app">
  12. <router-link :to="{name: 'app'}">app</router-link> // 注意, v-bind:to
  13. </div>
  14. </template>
  15. 复制代码

路由元信息 meta

和 HTML 中 header 部分的 meta 页面原信息类似,例如 description 有助于 seo 等,一般和路由没什么关系的配置可以写在这。

  1. // client/config/routes.js
  2. export default [
  3. {
  4. path: '/app',
  5. component: Todo,
  6. name: 'app',
  7. meta: {
  8. title: 'this is app',
  9. description: 'xxx'
  10. }
  11. }
  12. ]
  13. 复制代码

子路由 children

嵌套路由

  1. // client/config/routes.js
  2. import Todo from '../views/todo/todo.vue'
  3. import Login from '../views/login/login.vue'
  4. export default [
  5. {
  6. path: '/app',
  7. component: Todo,
  8. },
  9. children: [ // 在 app 路由下,添加子路由
  10. {
  11. path: 'test',
  12. component: Login
  13. }
  14. ]
  15. }
  16. ]
  17. 复制代码
  1. // client/views/todo/todo.vue
  2. <template>
  3. <section class="real-app">
  4. <router-view /> // 子路由使用,需要再上一级路由页面加上 router-view 显示。
  5. </section>
  6. </template>
  7. 复制代码

给 router-view 加 transition

给所有路由切换加个过渡效果。

  1. // client/app.vue
  2. <template>
  3. <div id="app">
  4. <transition name="fade"> // 使用 name
  5. <router-view />
  6. </transition>
  7. </div>
  8. </template>
  9. 复制代码
  1. /* client/assets/styles/global.styl */
  2. .fade-enter-active, .fade-leave-acitve /* fade- */
  3. transition: opacity 0.3s
  4. .fade-enter, .fade-leave-to
  5. opacity : 0
  6. 复制代码

转载于:https://juejin.im/post/5b95187f6fb9a05d0a050dfd

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/633155
推荐阅读
相关标签
  

闽ICP备14008679号