认识vue-router
认识vue-router
-
目前前端流行的三大框架, 都有自己的路由实现:
- Angular的ngRouter
- React的ReactRouter
- Vue的vue-router
- vue-router是Vue.js官方的路由插件,它和vue.js是深度集成的,适合用于构建单页面应用。
- 我们可以访问其官方网站对其进行学习: https://router.vuejs.org/zh/
-
vue-router是基于路由和组件的
- 路由用于设定访问路径, 将路径和组件映射起来.
- 在vue-router的单页面应用中, 页面的路径的改变就是组件的切换.
-
我们直接在webpack环境下来安装路由
- 步骤一: 安装vue-router
npm install vue-router --save
- 步骤二: 在模块化工程中使用它(因为是一个插件, 所以可以通过Vue.use()来安装路由功能)
- 导入路由对象,并且调用 Vue.use(VueRouter)
- 创建路由实例,并且传入路由映射配置
- 在Vue实例中挂载创建的路由实例
- 步骤一: 安装vue-router
-
使用vue-router的步骤
- 创建路由组件
- 配置路由映射: 组件和路径映射关系
- 使用路由: 通过
<router-link>和<router-view>
-
创建router实例
- 在src文件夹下创建一个router文件夹
- 在router文件夹下创建一个index.js文件
- 在index.js文件中写代码
//引入vue import Vue from 'vue' //引入路由 import VueRouter from 'vue-router' //1. 注入插件 Vue.use(VueRouter) //2. 定义路由 const routes = [] //3. 创建router实例 const router = new VueRouter({ routes }) //4. 导出router实例 export default router
-
挂载到Vue实例中
- 在main.js中引入路由实例
import router from './router'
- 挂载到vue实例中
new Vue({ el: '#app', router, render: h => h(App) })
使用路由到实际应用
-
接下来我们创建几个路由组件使用路由
- 在components里面创建两个.vue文件
- 分别为
- home.vue
- about.vue
-
配置组件和路径的映射关系
- 在router文件下的index.js文件下配置
import Home from '../components/home' import About from '../components/about' const routes =[ { path: '/home' component: Home }, { path: '/about' component: About } ]
-
使用路由
- 现在我们可以去页面上使用路由了
- 在App.vue中使用路由
<template>
<div id="app">
<h1>我是网站的标题</h1>
<router-link to="/home">首页</router-link>
<router-link to="/about">首页</router-link>
<router-view></router-view>
<h2>我是App中一些底部版本信息</h2>
</div>
</template>
-
<router-link>
: 该标签是一个vue-router中已经内置的组件, 它会被渲染成一个<a>
标签. -
<router-view>
: 该标签会根据当前的路径, 动态渲染出不同的组件,占位的作用 -
网页的其他内容, 比如顶部的标题/导航, 或者底部的一些版权信息等会和
<router-view>
处于同一个等级. -
在路由切换时, 切换的是
<router-view>
挂载的组件, 其他内容不会发生改变. -
最终效果
-
当路径是根路径时,
router-view
没有渲染视图
-
点击首页,路径切换
router-view
渲染home组件
-
点击关于,路径切换
router-view
渲染about组件
-
路由的默认路径
- 默认情况下, 进入网站的首页, 我们希望
<router-view>
渲染首页的内容 - 如何可以让路径默认跳到到首页, 并且
<router-view>
渲染首页组件- 也是需要配置一个映射
const routes = [ path: '/', redirect: '/home' ]
- 配置解析
- 我们在routes中又配置了一个映射.
- path配置的是根路径: /
- redirect是重定向, 也就是我们将根路径重定向到/home的路径下
HTML5的History模式
-
改变路径的方式有两种:
- URL的hash
- HTML5的history
- 默认情况下, 路径的改变使用的URL的hash
-
使用HTML5的history模式, 进行如下配置即可:
const router = new VueRouter({
routes,
mode: 'history'
})
router-link补充
-
还有一些其他属性: - tag: 可以指定
<router-link>
之后渲染成什么组件, 默认为<a>
元素 - replace: 不会留下history记录, 所以指定replace的情况下, 后退键返回不能返回到上一个页面中
- active-class: 当
<router-link>
对应的路由匹配成功时, 会自动给当前元素设置一个router-link-active的class, 设置active-class可以修改默认的名称.- 在进行高亮显示的导航菜单或者底部tabbar时, 会使用到该类.
- 但是通常不会修改类的属性, 会直接使用默认的router-link-active即可.
- tag: 可以指定
-
修改linkActiveClass
- 该class具体的名称也可以通过router实例的属性进行修改
const router = new VueRouter({ routes, mode: 'history', linkActiveClass: 'active' })
- exact-active-class
- 类似于active-class, 只是在精准匹配下才会出现的class
路由代码跳转
- 时候, 页面的跳转可能需要执行对应的JavaScript代码, 这个时候, 就可以使用第二种跳转方式了
- 比如, 我们在App.vue将代码修改如下:
动态路由
- 在某些情况下,一个页面的path路径可能是不确定的,比如我们进入用户界面时,希望是如下的路径:
- /user/aaaa或/user/bbbb
- 除了有前面的/user之外,后面还跟上了用户的ID
- 这种path和Component的匹配关系,我们称之为动态路由(也是路由传递数据的一种方式)
-
首先配置映射关系
{
path: '/user/:id/'
compontent: User
} -
-
创建.vue文件
{{ $route.params.id}}
``` -
-
在在App.vue中使用
-
<router-link to="/user/123">用户</router-link>
-
路由的懒加载
-
官方给出了解释:
-
当打包构建应用时,Javascript 包会变得非常大,影响页面加载。
-
如果我们能把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,这样就更加高效了
-
官方在说什么呢?
-
首先, 我们知道路由中通常会定义很多不同的页面.
-
这个页面最后被打包在哪里呢? 一般情况下, 是放在一个js文件中.
-
但是, 页面这么多放在一个js文件中, 必然会造成这个页面非常的大.
-
如果我们一次性从服务器请求下来这个页面, 可能需要花费一定的时间, 甚至用户的电脑上还出现了短暂空白的情况.
-
如何避免这种情况呢? 使用路由懒加载就可以了.
-
路由懒加载的主要作用就是将路由对应的组件打包成一个个的js代码块.
-
只有在这个路由被访问到的时候, 才加载对应的组件
懒加载的方式
- 方式一: 结合Vue的异步组件和Webpack的代码分析
const Home = resolve => { require.ensure(['../components/Home.vue'], () => { resolve(require('../components/Home.vue')) })};```
- 方式二: AMD写法
```js
const About = resolve => require(['../components/About.vue'], resolve);```
- 方式三: 在ES6中, 我们可以有更加简单的写法来组织Vue异步组件和Webpack的代码分割
```js
const Home = () => import('../components/Home.vue')```
本文来自博客园,作者:懒惰ing,转载请注明原文链接:https://www.cnblogs.com/landuo629/p/12483259.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?