vue学习之vue-router

本文详细介绍了vue-router的基本概念、安装、配置、动态路由匹配、编程式导航、重定向及组件传参等核心功能。vue-router是vue.js项目的必备组件,用于实现SPA应用的页面路由管理。通过路由的配置,可以轻松实现页面间的跳转、动态参数传递等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        今天分享一个十分重要的前端技术,vue-router,路由。在所有的vue项目中都需要使用到的技术,你说重不重要。

1.vueRouter的理解

一个路由(route)就是一组映射关系(key - value),多个路由需要路由器(router)进行管理。

vueRouter是vue 的一个插件库,专门用来实现 SPA 应用

SPA单页面应用参考:单页面应用(SPA) - 一只菜鸟攻城狮啊 - 博客园

2.路由的安装

如果你用vue-cli脚手架来搭建项目,配置过程会选择是否用到路由(详细见vue-cli 脚手架),如果选择y,后面下载依赖会自动下载vue-router。
这里还是说一下安装:在终端或者cmd中输入npm install vue-router命令

3.配置vueRouter

如果在一个模块化工程中使用它,必须要通过 Vue.use() 明确地安装路由功能,用vue-cli生产了我们的项目结构,src文件目录下会有一个router文件夹,此处就是编写路由组件的地方。在src/router/index.js,这个文件就是路由的核心文件:

import Vue from 'vue'   //引入Vue
import Router from 'vue-router'  //引入vue-router
import Hello from '@/components/Hello'  //引入根目录下的Hello.vue组件
 
Vue.use(Router)  //Vue全局使用Router
 
export default new Router({
  routes: [              //配置路由,这里是个数组
    {                    //每一个链接都是一个对象
      path: '/',         //链接路径
      name: 'Hello',     //路由名称,
      component: Hello   //对应的组件模板
    },
    {
      path:'/hi',
      component:Hi,
    }
  ]
})

4.路由的使用

(1)在组件中使用router-link标签,router-link 是一个组件,它默认会被渲染成一个带有链接的a标签,通过to属性指定链接地址。

<router-link to="/">[text]</router-link>

        to:导航要去跳转的路径,要填写的是你在router/index.js文件里配置的path值,跳转到哪里就使用哪个

        [text] :就是我们要显示给用户的导航名称

(2)使用router-view标签用来显示匹配到的组件需要在什么位置展示就写在什么位置

5.动态路由匹配

我们经常需要把某种模式匹配到的所有路由,全都映射到同个组件,例如,我们有一个 User 组件,对于所有 ID 各不相同的用户,都要使用这个组件来渲染。那么,我们可以在 vue-router 的路由路径中使用“动态路径参数来达到这个效果:

const User = {
  template: '<div>User</div>'
}

const router = new VueRouter({
  routes: [
    // 动态路径参数 以冒号开头
    { path: '/user/:id', component: User }
  ]
})

比如说,现在有‘张三’和‘李四’都需要映射到这个路由上,一个“路径参数”使用冒号 : 标记。当匹配到一个路由时,参数值会被设置到 this.$route.params,可以在每个组件内使用,组件内使用this.$route.params.id来获取动态路由,所以我们就可以在user组件中展示对应的是张三还是李四

const User = {
  template: '<div>User {{ $route.params.id }}</div>'
}

6.编程式导航

1.router.push( )
想要导航到不同的 URL,则使用 router.push (在创建vue实例并挂载后调用)。router.push方法就是用来动态导航到不同的链接的,这个方法会向 history 栈添加一个新的记录,所以,当用户点击浏览器后退按钮时,则回到之前的 URL。
当你点击 <router-link> 时,这个方法会在内部调用,所以说,点击 <router-link :to="..."> 等同于调用 router.push(...)。

声明式编程式
<router-link :to="...">router.push(...)

该方法的参数可以是一个字符串路径,或者一个描述地址的对象。例如:

// 字符串
router.push('home')

// 对象
router.push({ path: 'home' })

// 命名的路由
router.push({ name: 'user', params: { userId: '123' }})

2.router.replace( )
router.replace跟 router.push 很像,唯一的不同就是,它不会向 history 添加新记录,而是跟它的方法名一样 —— 替换掉当前的 history 记录。

3.router.go(n)
这个方法的参数是一个整数,意思是在 history 记录中向前或者后退多少步,类似 window.history.go(n)。

 7.重定向

重定向也是通过 routes 配置来完成,是从一个路径重定向为另一个路径,比如说,

const router = new VueRouter({
  routes: [
    { path: '/a', redirect: '/b' }
  ]
})

这里就是说如果你跳转的路径是a,会定向到b,这就是重定向

重定向的目标也可以是一个命名的路由:

const router = new VueRouter({
  routes: [
    { path: '/a', redirect: { name: 'foo' }}
  ]
})

8.路由组件传参 

在组件中使用 $route 会使之与其对应路由形成高度耦合,从而使组件只能在某些特定的 URL 上使用,限制了其灵活性。所以路由组件传参就是为了解决$route的耦合

通过 props 解耦

const User = {
  props: ['id'],
  template: '<div>User {{ id }}</div>'
}
const router = new VueRouter({
  routes: [
    { path: '/user/:id', component: User, props: true },

    // 对于包含命名视图的路由,你必须分别为每个命名视图添加 `props` 选项:
    {
      path: '/user/:id',
      components: { default: User, sidebar: Sidebar },
      props: { default: true, sidebar: false }
    }
  ]
})

路由传参有三种方式,分别是布尔值,对象,函数

1.布尔模式
如果 props 被设置为 true,route.params 将会被设置为组件属性。

2.对象模式

如果 props 是一个对象,它会被按原样设置为组件属性。当 props 是静态的时候有用。

const router = new VueRouter({
  routes: [
    {
      path: '/promotion/from-newsletter',
      component: Promotion,
      props: { newsletterPopup: false }
    }
  ]
})

3.函数模式

你可以创建一个函数返回 props。这样你便可以将参数转换成另一种类型,将静态值与基于路由的值结合等等。

const router = new VueRouter({
  routes: [
    {
      path: '/search',
      component: SearchUser,
      props: route => ({ query: route.query.q })
    }
  ]
})

路由总结暂时先告一段落,若有补充会及时更新,写的不好敬请谅解 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值