前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >vue路由vue-router

vue路由vue-router

原创
作者头像
有勇气的牛排
发布于 2023-06-25 15:32:39
发布于 2023-06-25 15:32:39
20300
代码可运行
举报
运行总次数:0
代码可运行

1 安装

步骤一:安装vue-router

代码语言:shell
AI代码解释
复制
npm install vue-router --save

步骤二:在模块化工程中使用它(因为是一个插件,所以可以通过Vue.use()来安装路由功能)

  1. 导入路由对象,并且调用Vue.use(VueRouter)
  2. 创建路由实例,并且传入路由映射配置
  3. 在Vue实例中挂载创建的路由实例

2 使用vue-router的步骤

  1. 创建路由组件
  2. 配置路由映射:组件和路径映射的关系
  3. 使用路由:通过<router-link>和<router-view>
代码语言:shell
AI代码解释
复制
<router-link>:该标签是一个vue-router中已经内置的组件,它会被渲染成一个<a>标签

<router-view>:该标签会根据当前路径,渲染出不同的组件

网页中其他的内容,比如顶部的标题/导航,或者底部的一些版权信息会和<router-view>出于同一个等级

在路由切换时,切换的是<router-view>挂载的组件,其他内容不会发生改变

3 history模式

index.js的export中添加

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mode: 'history'

4 router-link补充

tag属性:渲染为指定元素

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<router-link to="/home" tag="button">首页</router-link>

replace属性:该属性不会留下history记录,所以指定replace的情况下,后退键返回不能返回到上一个页面中

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<router-link to="/home" tag="button" replace>首页</router-link>

active-class:当<router-link>对应的路由匹配成功时,会自动给当前元素设置一个router-link-active的class,设置active-class可以修改默认的名称

  • 在进行高亮显示的导航菜单挥着底部tabbar时,会使用到该类
  • 但是通常不会修改类的属性,会直接使用默认的router-link-active即可

router-link-active属性修改为active

代码语言:html
AI代码解释
复制
<router-link to="/home" tag="button" replace active-class="active">首页</router-link>

5 代码跳转路由

代码语言:html
AI代码解释
复制
<button @click="homeClick">首页</button>
代码语言:html
AI代码解释
复制
methods: {
  homeClick() {
    // 通过代码的范式修改路径 vue-router
    this.$router.push('/home')
    console.log('homeClick');
  }
}

6 动态路由

代码语言:html
AI代码解释
复制
{
  path: '/user/:userId',
  name: 'User',
  component: User
}

子路由获取参数

代码语言:html
AI代码解释
复制
<template>
  <div>
    <h2>我是用户界面</h2>
    <p>用户信息</p>
    <h2>{{ userId }}</h2>
    <h2>{{ $route.params.userId }}</h2>
  </div>
</template>

<script>
  export default {
    name: "User",
    computed: {
      userId() {
        return this.$route.params.userId
      }
    }
  }

</script>

7 路由的懒加载

  • 当导包构建应用时,javascript包会变得非常大,影响页面加载
  • 如果我们能把不同路由的对应组件分割成不同的代码块,然后当路由被访问的时候才能加载对应的组件,这样就更高效了

路由懒加载做了什么

  • 主要所用是将路由的对应组件打包成一个个的js代码块
  • 只有在这个路由被访问到的时候,才加载对应的组件

index.js

方式一:

代码语言:html
AI代码解释
复制
const Home = resolve => {
  require.ensurre(['../components/Home.vue'],()=>{
    resolve(require('../components/Home.vue'))
  })
}

方式二:AMD写法

代码语言:html
AI代码解释
复制
const About = resolve => require(['../compontents/About.vue'], resolve);

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

代码语言:html
AI代码解释
复制
// 懒加载方法导入(一个懒加载对应一个js文件)
const Home = () => import('../components/Home')

8 嵌套路由

Home.vue

代码语言:html
AI代码解释
复制
<router-link to="/home/news">新闻</router-link>
<router-link to="/home/message">消息</router-link>

<router-view></router-view>

index.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  path: '/home',
  name: 'Home',
  component: Home,
  children: [
    {
      path: '',
      redirect: '/news'
    },
    {
      path: 'news',
      component: HomeNews
    },
    {
      path: 'message',
      component: HomeMessage
    },
  ]
},

9 传递参数

  • params类型:/route/:id
  • query:类型 /router?id=123

buttonrouter-link方法二选一

http://localhost:8080/profile?id=1&name=charles

代码语言:html
AI代码解释
复制
# router-link
<router-link :to="{ path: '/profile',query:{id:'1',name:'charles'}}">个人资料</router-link>

# button
<button @click="userClick">用户</button>
<button @click="profileClick">个人资料</button>
<router-view></router-view>

userClick() {
  this.$router.push('/user/' + this.userId)
},
profileClick() {
  this.$router.push({
    path: '/profile',
    query: {
      id: 2,
      name: 'tom'
    }
  })
}

profile.vue

代码语言:html
AI代码解释
复制
<h2>{{ $route.query.id }}</h2>
 <h2>{{ $route.query.name }}</h2>

10 导航守卫

代码语言:html
AI代码解释
复制
// 前置守卫(guard)
router.beforeEach((to, from, next) => {
  document.title = to.matched[0].meta.title
  next()
})
// 后置钩子(hook)
router.afterEach((to,from)=>{
  
})

index.js

代码语言:html
AI代码解释
复制
{
  path: '/about',
  name: 'About',
  meta: {
    title: '关于'
  },
  component: About
},

About.vue

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script>
  export default {
    name: "Home",
    created() {  // 创建组件
      console.log('created');
      // document.title = '首页'
      document.title = to.matched[0].meta.title
    },
    // mounted() {  // 挂载到dom
    //   console.log('mounted');
    // },
    // updated() { // 界面发生刷新
    //   console.log('updated');
    // }
  }
</script>

11 keep-alive遇见vue-router

  • keep-alive是Vue内置的一个组件,可以使被包含的组件保留状态,或避免重新渲染

(1)include:字符串或正则表达式,只有匹配的组件会被缓存

(2)exclude:字符串或正则表达式,任何匹配的组件都不会被缓存

  • router-view:也是一个组件,如果直接被包在keep-alive里面,所有路径匹配到的视图组件都会被缓存
代码语言:html
AI代码解释
复制
// 这两个函数,只有该组件被保持了装填使用keep-alive时,才是有效的
activated() {
  this.$router.push(this.path)
},
beforeRouteLeave(to, from, next) {
  this.path = this.$route.path;
  next()
}
代码语言:html
AI代码解释
复制
<keep-alive>
  <router-view/>
</keep-alive>

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
vue-router 的基本使用
vue-router 官方文档: https://router.vuejs.org/zh
很酷的站长
2022/12/28
7010
vue-router 的基本使用
一文让你彻底搞懂 vue-Router
路由是网络工程里面的专业术语,就是通过互联把信息从源地址传输到目的地址的活动。本质上就是一种对应关系。分为前端路由和后端路由。
呆呆
2021/12/01
8560
Vue学习-Vue router
在配置Vue-router时有两种模式,分别为:hash模式(默认)、history模式。
花猪
2022/02/17
4.6K0
Vue学习-Vue router
17. vue-route详细介绍
说道路由, 我们最熟悉的路由是什么呢? 那就是路由器了。 其实路由器有两个重要的功能: 路由和传送
用户7798898
2021/04/09
5.6K0
17. vue-route详细介绍
Vue-router 学习笔记
在以前,前后端是不分离的,这个阶段通常是由服务端渲染好页面(SSR),再发送页面给前端去展示;接着到了前后端分离的阶段,前端向静态资源服务器拿资源,再通过 js 渲染页面,此时仍然是一个 url 对应一份 html+css+js。再后来出现了 SPA 单页面应用的概念,实际上它只有一个页面,但给我们的体验是多页面之间的切换。
Chor
2019/11/18
6600
vue2进阶篇:vue-router之缓存路由组件
<font color='red'>\<keep-alive></font>用于路由缓存,其中inclue用于指定只缓存指定名称的组件,<font color='red'>其中News指代一定是“组件名”,指代一定是“组件名”,指代一定是“组件名”,重要的事情说3遍</font>。
刘大猫
2024/10/10
2610
vue2进阶篇:vue-router之“使用组件内路由守卫”
前置路由守卫或者后置路由守卫中,to指代切换到哪个路由组件,from指代从哪里来的路由组件,next指代下一个路由组件是否放行显示
刘大猫
2024/10/10
3670
vue2进阶篇:vue-router之使用“全局路由守卫”
前置路由守卫或者后置路由守卫中,to指代切换到哪个路由组件,from指代从哪里来的路由组件,next指代下一个路由组件是否放行显示
刘大猫
2024/10/10
2350
Vue之Router(二)
  为什么会有动态路由呢?因为在一般的项目中,都会涉及到用户登陆的操作,我们希望某某用户登陆某个网页的时候,能够在该网页的UURL地址上显示用户的登录名或者用户ID等的信息。 动态路由就是根据不同的用户将在网页的URL中动态追加登录名或者ID等信息。 比如:
yuanshuai
2022/08/22
7630
Vue之Router(二)
Vue之Router(三)
  前面说过,当你使用 this.$router 获取的时候其实就是获取了 router 实例。
yuanshuai
2022/08/22
5100
Vue之Router(三)
vue-router(路由)详细教程
如果你用vue-cli脚手架来搭建项目,配置过程会选择是否用到路由(详细见vue-cli 脚手架),如果选择y,后面下载依赖会自动下载vue-router。 这里还是说一下安装:npm install vue-router
全栈程序员站长
2022/09/08
3.2K0
vue-router(路由)详细教程
Vue Router详细教程
1.什么是路由 1.1路由简介 说起路由你想起了什么?路由是一个网络工程里面的术语。 路由(routing)就是通过互联的网络把信息从源地址传输到目的地址的活动。 --- 维基百科 额,啥玩意?
说故事的五公子
2020/08/10
3.7K0
Vue Router详细教程
vue2进阶篇:vue-router之编程式路由导航
<font color='red'>答案:</font>有些场景不适合使用\<router-link>标签,比如跳转路由最终呈现是个button按钮而不是\<a>标签;再或者页面加载等待2秒后自动跳转功能,而你\<router-link>标签只能生成\<a>标签无法点击,总不能渲染后让用户去点击跳转啊。
刘大猫
2024/10/10
1750
【vue】12.0 vue路由:vue-router
Vue Router官网: https://router.vuejs.org/zh/installation.html
conanma
2021/11/03
7740
vue2笔记12 router路由
添加replace属性,导航时使用新地址替换当前导航历史记录,而不是压入历史记录栈
路过君
2022/04/13
6780
vue-router 详解
vue-router是Vue.js官方的路由插件,它和vue.js是深度集成的,适合用于构建单页面应用。 我们可以访问其官方网站对其进行学习:https://router.vuejs.org/zh/
全栈程序员站长
2022/09/14
1.9K0
vue-router 详解
Vue路由
什么是单页应用程序: 单页应用程序:SPA【Single Page Application】是指所有的功能都在一个html页面上实现
用户11097514
2024/05/31
2610
Vue路由
vue2进阶篇:vue-router之命名路由
命名路由请使用name属性,替换掉path属性的作用,且name直接指定名称即可,而path必须指定3级目录(path=’/demo/test/welcome’)才行。
刘大猫
2024/10/12
1980
vue路由详解(知识点重温)
  在router文件夹的index.js文件的new VueRouter({routers:[{ path..}]})里的配置
隔壁老陈
2023/03/09
7530
Vue笔记(10) vue-router
这种方法就类似于一个栈结构,最后push进去的URL会在栈顶,然后history.back()的时候就会出栈,也就会返回到我们上一个push进去的URL中
y191024
2022/09/20
8940
Vue笔记(10) vue-router
相关推荐
vue-router 的基本使用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验