vue-router两种模式区别及使用注意事项详解

Vue-router两种模式区别及使用注意事项详解

前言

在学习Vue时,经常会使用Vue-router来实现前端路由。Vue-router有两种模式:history模式和hash模式。本篇文章将详细讲解这两种模式的区别,并给出使用注意事项。

区别

Hash模式

默认模式是hash模式,即地址栏的URL格式是以#/开头,比如:

http://localhost:8080/#/home

在hash模式下,当URL发生变化时,页面不会重新加载,而是通过捕获hash变化事件来进行局部更新。

在Vue-router中,通过mode: 'hash'来指定使用hash模式。

History模式

另一种模式是history模式,即地址栏的URL格式是普通的URL格式,比如:

http://localhost:8080/home

在history模式下,当URL发生变化时,页面会走正常的HTTP请求流程,因此在使用history模式时,需要保证服务器正确配置,以免出现404错误。

在Vue-router中,通过mode: 'history'来指定使用history模式。

注意事项

Hash模式下的路由传参

在hash模式下的路由传参,使用$route.query方式是无效的,应该使用$route.params。例如:

// 路由配置
{
  path: '/user/:id',
  component: UserComponent
}

// 跳转
router.push('/user/123')

// 获取参数
this.$route.params.id // 123

History模式下的服务端配置

当你使用history模式时,服务器应该正确的配置,以便在刷新页面时能够重定向到正确的路径。举一个栗子,假设我们的服务器是Nginx,需要在配置文件中添加以下配置:

location / {
  try_files $uri $uri/ /index.html;
}

这将使全部的路由请求都返回index.html页面,应用程序就可以在客户端接管。

示例

Hash模式下的示例

在hash模式下,我们可以定义如下路由:

const router = new VueRouter({
  mode: 'hash',
  routes: [
    {
      name: 'home',
      path: '/',
      component: HomeComponent
    },
    {
      name: 'about',
      path: '/about',
      component: AboutComponent
    }
  ]
})

上述路由配置中,我们定义了两个路由://about

在页面中可以通过<router-link>标签来切换路由。

<div>
  <h1>Hello Vue-router Hash Mode!</h1>
  <router-link to="/">Home</router-link>
  <router-link to="/about">About</router-link>
  <router-view></router-view>
</div>

History模式下的示例

在history模式下,我们需要在服务器中做出如下配置:

location / {
  try_files $uri $uri/ /index.html;
}

然后定义如下路由:

const router = new VueRouter({
  mode: 'history',
  routes: [
    {
      name: 'home',
      path: '/',
      component: HomeComponent
    },
    {
      name: 'about',
      path: '/about',
      component: AboutComponent
    }
  ]
})

与hash模式下相似,我们同样可以通过<router-link>标签来切换路由。

<div>
  <h1>Hello Vue-router History Mode!</h1>
  <router-link to="/">Home</router-link>
  <router-link to="/about">About</router-link>
  <router-view></router-view>
</div>

总结

通过本文的学习,我们了解了Vue-router两种路由模式的区别、以及注意事项。对于前端路由的学习和掌握,这是至关重要的,它会极大提高你的开发效率和代码的可维护性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue-router两种模式区别及使用注意事项详解 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • js实现时间显示几天前、几小时前或者几分钟前的方法集锦

    实现时间显示几天前、几小时前或者几分钟前的方法,在前端开发中是比较常见的需求之一,下面我们来讲解一下相关的实现技巧和方法。 方法一:利用Moment.js库实现 Moment.js是一个便捷的日期处理类库,可以帮助我们轻松地完成日期和时间的格式化、解析和计算等操作。在基于Moment.js库实现的时间显示几天前、几小时前或者几分钟前的方法中,我们可以使用其巨…

    JavaScript 2023年5月27日
    00
  • Js中var,let,const的区别你知道吗

    当我们在 JavaScript 中声明变量时,可以使用三种关键字 var、let 和 const。这些关键字虽然能够完成相同的任务,但它们的含义和用法是不同的。 var关键字 使用 var 关键字,我们可以在 JavaScript 中声明一个变量。它是 ES5 标准中的一部分。var 关键字在声明变量时,会将该变量提升到函数或全局作用域的顶部。这意味着,在声…

    JavaScript 2023年6月10日
    00
  • JavaScript中时间格式化新思路toLocaleString()

    JavaScript中日期时间格式化是Web开发中非常重要的一部分,有效的日期时间格式化可以使得代码更加易读、易懂。同时,格式化后的日期时间字符串也可以满足一些需求,如显示本地格式化的时间、显示不同时区的时间、自定义时间格式等。 在JavaScript中,可以使用toLocaleString()方法来格式化日期时间。该方法返回本地时间的格式字符串,可以轻松地…

    JavaScript 2023年5月27日
    00
  • javascript 24小时弹出一次的代码(利用cookies)

    针对“javascript 24小时弹出一次的代码(利用cookies)”这个问题,我可以给你讲解一下完整的攻略。 什么是Cookie? 在开始讲解代码前,我们先简要介绍一下Cookie。Cookie是指浏览器保存在用户电脑上的一小段文本信息,一般用来记录用户在访问网站时的一些信息,例如用户名、购物车中的商品等。 Cookie主要有以下属性: 名称:一个唯一…

    JavaScript 2023年6月11日
    00
  • 使用JS操作文件(FileReader读取–node的fs)

    使用JS操作文件可以通过浏览器的FileReader API或Node.js的fs模块来实现。下面分别介绍这两种方式的实现方法。 使用FileReader读取文件 步骤 通过<input type=”file”>元素选择文件,获取文件的File对象 利用FileReader对象读取文件内容 将读取的文件内容显示到页面上 代码示例 <!DOC…

    JavaScript 2023年5月27日
    00
  • JavaScript注释

    JavaScript注释是指在JavaScript代码中添加的文本,旨在对代码进行解释并提高代码的可读性。通常情况下,当写代码时需要将一些重要信息记录下来,供自己或其他开发者参考。JavaScript注释是实现这一目标的一种简单而有效的方式。 JavaScript注释有两种,多行注释和单行注释。通常情况下,多行注释用于对整段代码进行解释,单行注释用于对单行代…

    Web开发基础 2023年3月30日
    00
  • 使用开源Cesium+Vue实现倾斜摄影三维展示功能

    下面是使用开源Cesium+Vue实现倾斜摄影三维展示功能的完整攻略。 1. 开源Cesium+Vue简介 1.1 Cesium Cesium 是一个可视化地球数据的 JavaScript 库,拥挤者来自美国宾夕法尼亚州的开源项目。 Cesium支持多样化地球数据的可视化,包括卫星、建筑、城市、气象等等,特别是对于三维地球数据的处理。 1.2 Vue Vue…

    JavaScript 2023年6月11日
    00
  • 如何自己实现JavaScript的new操作符

    下面就是如何自己实现JavaScript的new操作符的攻略。 什么是new操作符 在JavaScript中,new操作符用于创建一个实例对象,它接收一个函数作为参数,并调用该函数构造一个新的实例对象。基本语法如下: var instance = new Constructor(); 其中Constructor是要被实例化的函数,在该函数内部使用了this关…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部