Vue全家桶react & vue & angular

Vue-router 路由 (常见用法)

2022-04-06  本文已影响0人  生命里那束光

vue-router 的常见用法

一个完整的路由必须包含:路由链接和路由占位符、路由实例、路由规则链接的路由组件

1. 路由重定向

2. 嵌套路由

通过路由实现组件的嵌套展示,叫做嵌套路由。

2.1 声明子路由链接和子路由占位符

About.vue 组件中,声明 tab1 和 tab2 的子路由链接以及子路由占位符。示例代码如下:

2.2 通过 children 属性声明子路由规则

在 src/router/index.js 路由模块中,导入需要的组件,并使用 children 属性声明子路由规则:

3. 路由命名

//添加路由链接
//声明式导航
<router-link :to="{ name: 'user', params: { id: 123 }}">User</router-link>
//编程式导航
router.push({ name: 'user', params: { id: 123 }})

//定义路由规则
const router = new VueRouter({
    routes: [
        {
         path: '/user/:id',
         name: 'user',
         component: User
        }
    ]
})

4. 动态路由与路由匹配

4.1 动态路由的概念

动态路由指的是:把 Hash 地址中可变的部分定义为参数项,从而提高路由规则的复用性。

在 vue-router 中使用英文的冒号(:)来定义路由的参数项。示例代码如下:

4.2 $route.params 参数对象

动态路由渲染出来的组件中,可以使用 this.$route.params 对象访问到动态匹配的参数值

5. 路由传递参数和接收参数

<div id="app">
      <router-link to="/user/1">User1</router-link>
      <!-- 路由占位符 -->
      <router-view></router-view>
</div>
const User = {
         //组件的props属性接收参数
        props: ['id'],
         //props: ['uname', 'age'],
         //props: ['id', 'uname', 'age'],
        template: '<h1>User 组件 -- 用户id为: {{id}}</h1>'
}

// 创建路由实例对象
const router = new VueRouter({
    // 所有的路由规则
    routes: [
        { path: '/', redirect: '/user'},
         //props:true 开启传参
        { path: '/user/:id', component: User, props: true },
         //传对象类型props: { uname: 'lisi', age: 20 }
         //传函数类型props: route => ({ uname: 'zs', age: 20, id: route.params.id })
         //params传值
         { path: '/search', component: SearchUser,props: route => ({ query: route.query.q })}
         //query传值
    ]
})

6. 路由的懒加载

路由懒加载的应用场景:

路由懒加载的作用:

6.1 路由懒加载的用法

在ES6中, 我们可以有更加简单的写法来组织Vue异步组件和Webpack的代码分割

const Home = () => import('../components/Home.vue')

例如:

// 配置路由相关的信息
import VueRouter from 'vue-router'
import Vue from 'vue'

// 原始路由加载
// import Home from '../components/Home'
// 路由懒加载(推荐)
const Home = () => imports('../components/Home')

// 1.通过Vue.use(插件), 安装插件
Vue.use(VueRouter)

const routes = [            // 在 routes 数组中,声明路由的匹配规则
  { 
    // path 表示要匹配的 hash 地址,component 表示要展示的路由组件  
    path: '/',
    name: 'Home',
    component: Home
  },
  {
    path: '/about',
    name: 'About',
    component: () => import('../views/About.vue')
  }
]

const router = new VueRouter({
  // 配置路由和组件之间的应用关系
  routes,
  mode: 'history',
  linkActiveClass: 'active'
})

// 3.将router对象传入到Vue实例
export default router

7. 导航守卫(钩子函数)

我们可以利用beforeEach来完成标题的修改

导航钩子的三个参数解析:

全局守卫示例:

7.1 next函数的三种调用方式
上一篇下一篇

猜你喜欢

热点阅读