vue-router路由——路由、路由的基本使用 、多级路由 、路由的配置、编程式路由跳转 $router 、路由信息 $route、路由守卫、路由元信息、路由查询参数

本文详细介绍了Vue Router在单页应用中的核心概念,包括路由的定义、基本使用方法(安装配置、链接与视图)、多级路由和编程式路由控制。重点讲解了路径配置、参数传递及如何处理未定义路由。

 一:路由是什么

  • 路由就是路径和组件的映射关系。
  • 在一个页面里, 切换业务场景
  • 单页面 SPA(single page web application) 应用
  • 整个应用只有一个完整的页面
  • 点击页面中的导航链接不会刷新页面 ,只会做页面的局部更新
  • 数据需要通过ajax请求获取

 二:路由的基本使用方法

安装vue-router,命令     npm i vue-router     (如果手动创建脚手架并勾选安装了router组件,则无需在安装)

应用插件:Vue.use(VueRouter)

router组件配置


<router-link  to="/切换的路由的地址">
切换路由:跳转到指定路径的页面(router-link 在实际页面中会渲染成a标签)
例:<router-link :to="{'name':'about'}">关于</router-link>
<router-link :to="{path:'/product/123',query:{age:18},hash:'best'}">产品</router-link>
query可以传递需要的参数 ,hash表示哈希值


 <router-view>
存放路由:通过router-link 的切换将router-view显示或隐藏,默认是被销毁掉的,需要的时候在挂载

 router配置        /router/index.js
一般配置
{
  path:"/user",
  name:"user",
  component:()=>import(xxx)
}
传参配置
{
  path:"/product/:id",(这里的id与上文的123对应)
  name:"product",
  component:xxx
}
传参在页面中获取:$route.params.id

特别注意:路由携带params参数时,若使用to的对象写法,则不能使用path配置项,必须使用name配置!



如果想给未定义路由的页面配置一个页面
{
   path:"*"
}  一定要配置在最后面

三:多级路由


 routes:[
        {
           path:'/about',
           component:About
        },
        {
            path:'/home',
            component:Home,
            // 二级路由
            children:[
                {
                //这里不用加/
                path:'news',
                component:News,
                },
                {
                //这里不用加/
                path:'message',
                component:Message,
                }
            ]
        }

<router-link class="list-group-item" active-class="active" to="/home/news">News</router-link>要去的二级路由页面

 四:编程式路由跳转 $router

  • 前进   forward()    go(1)
  • 后退   go(-1)    back()
  • 切换路由    push("/about")
  • 替换路由    replace("/about") (不留当前页面历史记录) 强制返回的话跳转到首页

    自定义跳转的层级 $router.go(层数),前提是去往的页面存在

### Vue3 中使用 vue-router 实现多页面路由跳转 #### 安装与初始化 为了在项目中使用 `vue-router`,需要先通过 npm 或 yarn 进行安装: ```bash npm install vue-router@next --save ``` 或者 ```bash yarn add vue-router@next ``` 完成安装之后,在项目的入口文件(通常是 main.js 或者 main.ts)引入并创建路由器实例。 #### 创建 Router 实例 定义好所有的路由规则,并将其传递给 createRouter 函数来创建一个新的路由器对象。这里展示了一个简单的例子[^1]: ```javascript import { createApp } from 'vue' import App from './App.vue' // 导入createRouter 和 createWebHistory 方法 import { createRouter, createWebHistory } from 'vue-router' const routes = [ { path: '/', name: 'Home', component: () => import('./views/HomeView.vue') }, { path: '/about', name: 'About', // 路由懒加载 component: () => import('./views/AboutView.vue') } ] const router = createRouter({ history: createWebHistory(), routes, }) const app = createApp(App) app.use(router).mount('#app') ``` 这段代码展示了如何设置基本路由表以及怎样把它们挂载到应用程序上。注意这里的按需加载方式可以有效减少初始包体积大小。 #### 配置路径与组件映射关系 上述示例中的 `routes` 数组包含了两个对象,分别代表不同的页面及其对应的视图组件。每个对象都有三个属性:path (URL 地址), name (唯一标识符),component (要渲染的内容)。 对于更复杂的场景,比如带有参数多级嵌套的情况,可以在 route 对象里进一步扩展配置项。例如,当涉及到动态匹配部分 URL 参数时,可以通过冒号前缀的方式指定占位符;而对于子路由,则可以直接向父级路由下添加 children 字段即可。 #### 页面间导航 一旦设置了合适的路由规则后,就可以利用 `<router-link>` 组件来进行页面间的平滑过渡了。此标签会自动生成相应的 HTML 锚点元素,并且内部处理好了点击事件以触发正确的视图更新逻辑[^2]。 ```html <template> <div id="nav"> <router-link to="/">首页</router-link> | <router-link :to="{name:'About'}">关于</router-link> </div> <!-- 渲染当前激活的 view --> <router-view></router-view> </template> ``` 以上模板片段演示了两种不同类型的链接写法——一种是指定绝对路径字符串作为目标位置,另一种则是借助编程式的命名路由语法传参过去。 #### 处理加载状态 考虑到用户体验方面的需,通常会在每次切换新页面之前显示一个短暂的 loading 提示框直到数据完全准备好为止。这可以通过监听全局钩子函数 beforeResolve 来实现: ```javascript router.beforeResolve((to, from, next) => { // 显示加载指示器... const matchedComponents = [] ;[].concat.apply([], to.matched.map(record => record.components)).forEach(component => { if (component.preFetch){ matchedComponents.push(component); } }); Promise.all(matchedComponents.map(c => c.preFetch())).then(() => { // 关闭加载指示器... next(); }); }); ``` 该回调接收三个参数分别是即将进入的目标页(to)、离开的源页面(from)还有继续执行后续操作所需的 next() 方法调用。在这个地方可以根据实际情况决定何时开启关闭进度条动画效果等。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值