vue前端路由以及vue-router两种模式实例详解

Vue前端路由和Vue-Router两种模式实例详解

前置知识

在深入理解本文内容前,你需要掌握以下技术:

  • Vue.js的基础知识
  • 编写和理解Vue组件
  • 熟悉Vue.js中template、script和style标签三者之间的关系

Vue前端路由

前端路由是一种在单页面应用程序(SPA)中切换视图的技术。一般情况下,前端路由的核心技术是修改浏览器url,以实现页面的切换和更新。

在Vue.js中使用前端路由,可以通过浏览器URL参数的改变来及时地更新所渲染的Vue组件。Vue.js提供了一个名为“vue-router”的插件,用于管理Vue.js应用程序的前端路由。

vue-router两种模式

在Vue.js中,vue-router插件支持两种前端路由模式:history模式和hash模式。它们之间的主要差异在于它们如何修改浏览器地址栏中的URL参数,以及如何处理用户按后退按钮的操作。

hash模式

hash模式是vue-router的默认路由模式,因为它可以跨浏览器兼容,而且易于部署。 在hash模式下,浏览器地址栏中的URL参数以“#”字符开头。在hash模式下,URL参数中的“#”字符后面的内容不会被发送到服务器端。

在Vue.js中,可以使用vue-router插件来设置路由,例如:

import Vue from 'vue'
import VueRouter from 'vue-router'

Vue.use(VueRouter)

const routes = [
  {
    path: '/home',
    component: Home
  },
  {
    path: '/about',
    component: About
  },
  {
    path: '/contact',
    component: Contact
  }
]

const router = new VueRouter({
  mode: 'hash', // 使用hash模式
  routes
})

new Vue({
  router,
  el: '#app',
  render: h => h(App)
})

history模式

history模式使用HTML5 History API来管理浏览器历史记录,并且在URL中不包括hash字符。要使用history模式,请将VueRouter实例化时传递一个mode选项,并将其设置为“history”。

在history模式下,如果在浏览器URL参数中输入无效的路由,服务器将返回404错误。

Vue.js的history模式示例:

import Vue from 'vue'
import VueRouter from 'vue-router'

Vue.use(VueRouter)

const routes = [
  {
    path: '/home',
    component: Home
  },
  {
    path: '/about',
    component: About
  },
  {
    path: '/contact',
    component: Contact
  }
]

const router = new VueRouter({
  mode: 'history', // 使用history模式
  routes
})

new Vue({
  router,
  el: '#app',
  render: h => h(App)
})

如何使用vue-router

在vue.js应用程序中,可以使用vue-router实现页面路由。我们需要做的第一件事是在Vue.js应用程序中安装vue-router。

import Vue from 'vue'
import VueRouter from 'vue-router'

Vue.use(VueRouter)

const router = new VueRouter({
  routes: [
    // 定义路由规则
    { path: '/home', component: Home },
    { path: '/about', component: About },
    { path: '/contact', component: Contact }
  ]
})

在上面的代码示例中,我们首先导入vue-router,然后通过Vue.use()方法进行安装。

一旦安装完成后,我们需要定义路由规则,将每个路由与其对应的Vue组件进行关联。在上面的代码示例中,我们定义了三个路由规则。当位于“/home”路径时,将使用Home组件进行渲染。

下一步是将VueRouter实例添加到Vue.js应用程序中。在下面的代码示例中,我们通过创建新的Vue实例来完成这项任务。

import Vue from 'vue'
import VueRouter from 'vue-router'

Vue.use(VueRouter)

const router = new VueRouter({
  routes: [
    // 定义路由规则
    { path: '/home', component: Home },
    { path: '/about', component: About },
    { path: '/contact', component: Contact }
  ]
})

new Vue({
  router,
  el: '#app',
  render: h => h(App)
})

在上面的代码示例中,我们将VueRouter实例作为选项传递给new Vue()。

最后,我们需要在Vue.js应用程序的模板中添加VueRouter的指令。在下面的代码示例中,我们在模板中添加了这些指令。

<div id="app">
  <router-link to="/home">Home</router-link>
  <router-link to="/about">About</router-link>
  <router-link to="/contact">Contact</router-link>
  <router-view></router-view>
</div>

在上面的代码示例中,我们在Vue.js应用程序的元素中定义了三个路由链接。当用户单击这些链接时,VueRouter将通过使用相应的Vue组件进行更新。

示例 1

假设我们有一个简单的Vue.js应用程序,它展示了一些商品的信息。在应用程序的首页中,我们将显示所有商品的列表。当用户单击列表中任何一个商品时,我们将使用前端路由显示商品的详细信息。

我们首先需要定义两个Vue组件:ProductList和ProductDetail。

<template>
  <div>
    <router-link :to="{ name: 'ProductDetail', params: { id: product.id } }">{{ product.title }}</router-link>
  </div>
</template>

在上面的代码示例中,我们使用将路由链接绑定到商品的标题。when the user clicks on the product title, the router will update the view to display the product detail component.

我们还需要定义ProductDetail组件。

<template>
  <div>
    <h1>{{ product.title }}</h1>
    <p>{{ product.description }}</p>
    <img :src="product.imgUrl">
  </div>
</template>

在上面的代码示例中,我们简单地展示了商品的标题、描述和图片。另外还需在路由规则中定义ProductDetail所对应的URL参数,在这里我们使用'/:id'。

import Vue from 'vue'
import VueRouter from 'vue-router'
import ProductList from './components/ProductList.vue'
import ProductDetail from './components/ProductDetail.vue'

Vue.use(VueRouter)

const routes = [
  { path: '/', component: ProductList },
  { path: '/product/:id', name: 'ProductDetail', component: ProductDetail }
]

const router = new VueRouter({
  mode: 'history',
  routes
})

new Vue({
  router,
  render: h => h(App)
}).$mount('#app')

在上面的路由规则中,我们为ProductDetail组件定义了一个名为“ProductDetail”的名称。我们使用这个名称来构造路由链接。另外,“:id”是一个变量。当请求http://example.com/product/id时,由ProductDetail组件来渲染。同时,我们还需要在元素中展示ProductDetail组件。

<!-- App.vue -->
<template>
  <div>
    <router-link to="/">Home</router-link>
    <router-view></router-view>
  </div>
</template>

在上面的代码示例中,我们定义了两个路由链接。当用户单击“Home”链接时,将返回到列表视图。

示例 2

对于更复杂的SPA应用程序,需要进行更多样化的路由设置。在这个例子中,用户可以直接访问某些路由,但是其他路由需要进行身份验证并且用户在通过身份验证之前不能访问。

首先,我们可以重新组织我们的路由规则:

const router = new VueRouter({
  mode: 'history',
  routes: [
    {
      path: '/',
      component: Home
    },
    {
      path: '/login',
      component: Login
    },
    {
      path: '/admin',
      component: Admin,
      meta: { requiresAuth: true } // 添加meta信息
    }
  ]
})

在上面的代码示例中,我们定义了三个路由规则。当用户在浏览器URL参数中输入“/”路径时,将渲染Home组件。当用户在浏览器URL参数中输入“/login”路径时,将渲染Login组件。当用户在浏览器URL参数中输入“/admin”路径时,并且已经通过身份验证,将渲染Admin组件。

我们还需要一个处理身份验证的函数。这个函数应该被Vue.js应用程序所拥有,以实现函数的复用。下面的代码展示了如何定义这个函数:

function isAuthenticated () {
  const token = localStorage.getItem('token')
  return !!token
}

在上面的代码示例中,我们检查本地存储中是否存在token值。如果存在,就返回true。否则,返回false。

在最后一步中,我们需要编写一个Vue.js插件,来确保用户通过了身份验证才能访问路由。

router.beforeEach((to, from, next) => {
  if (to.matched.some(route => route.meta.requiresAuth)) {
    if (isAuthenticated()) {
      next()
    } else {
      next({
        path: '/login',
        query: { redirect: to.fullPath }
      })
    }
  } else {
    next()
  }
})

在上面的代码示例中,我们在路由之前执行一个函数。这个函数检查是否需要身份验证,并根据需要执行相应的操作。如果需要进行身份验证,我们检查用户是否通过身份验证。如果用户通过身份验证,则继续渲染请求的路由。如果用户没有通过身份验证,则重定向到登录页面。

在这个例子中,我们的vue-router可以更好地管理相应的SPA应用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue前端路由以及vue-router两种模式实例详解 - Python技术站

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

相关文章

  • js+html制作简单验证码

    制作简单验证码需要使用HTML和JS两种语言。 HTML部分 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>验证码</title> </head> <body> <…

    JavaScript 2023年6月10日
    00
  • JavaScript 实现自己的安卓手机自动化工具脚本(推荐)

    以下是完整的攻略: JavaScript 实现自己的安卓手机自动化工具脚本(推荐) 简介 本文介绍如何使用 JavaScript 实现自己的安卓手机自动化工具脚本。通过这种方式,您可以自动化控制您的安卓手机进行各种任务,提高工作效率。本文采用 Appium + JavaScript 的组合实现。 准备 安装 Node.js。Node.js 是一个让 Java…

    JavaScript 2023年6月11日
    00
  • jsonp跨域获取数据的基础教程

    关于”JSONP跨域获取数据的基础教程”,以下是一份完整攻略。 什么是JSONP跨域获取数据? 当浏览器通过 AJAX 访问另一个域下的资源时,就会遇到跨域问题。JSONP 跨域获取数据是一种跨域解决方案,它利用了 html 页面可以跨域引用 js 脚本文件的特性,从而绕过了跨域限制。 JSONP 跨域获取数据的基本思路 JSONP 跨域获取数据的基本思路是…

    JavaScript 2023年5月27日
    00
  • js bind 函数 使用闭包保存执行上下文

    js中bind函数是一个非常常用的函数,它可以改变函数的上下文(this),常常用于一些特殊情况,如在事件处理函数中改变this指向。在使用bind函数的时候,为了保证绑定的上下文在函数执行时正确,使用闭包保存执行上下文是一个非常好的选择,本攻略将详细讲解如何使用闭包保存执行上下文。 什么是bind函数? bind函数是js中常用的一个函数,可以修改函数的上…

    JavaScript 2023年6月10日
    00
  • 简述JavaScript提交表单的方式 (Using JavaScript Submit Form)

    下面是使用JavaScript提交表单的详细攻略: 1. 背景知识 表单是网页中非常常见的一种交互方式,用户在表单中填写信息后,需要将表单提交到后台。本文将介绍如何使用JavaScript提交表单。 2. JavaScript提交表单的方式 2.1 使用表单提交按钮 通常情况下,表单中会有一个提交按钮,当用户点击提交按钮时,表单会自动提交。代码示例: &lt…

    JavaScript 2023年6月10日
    00
  • JavaScript展开操作符(Spread operator)详解

    JavaScript展开操作符(Spread operator)详解 展开操作符是JavaScript ES6(ECMAScript 2015)引入的一个新特性,它使用三个连续的点(…),通常用于展开数组和对象。本篇文章将详细讲解展开操作符的各种用法。 展开操作符的使用 展开数组 展开操作符可以用于展开数组,并将其展开为多个独立的值。示例代码如下: co…

    JavaScript 2023年5月27日
    00
  • 在javaScript中检测数据类型的几种方式小结

    接下来我将详细讲解在JavaScript中检测数据类型的几种方式小结。 检测数据类型的几种方式 typeof typeof 操作符可以返回值的数据类型字符串。它只有一些简单的规则,可以处理大多数数据类型,但也存在一些特殊情况。如下所示: typeof 123; // "number" typeof "123"; // …

    JavaScript 2023年5月28日
    00
  • 面向对象Javascript核心支持代码分享

    面向对象Javascript是一种使用对象来组织代码的编程范式。通过这种方式,可以将大型应用程序分解成较小的、易于理解和组织的结构。本攻略将讨论在Javascript中实现面向对象编程的核心概念和技术,并分享一些示例代码。 1. 创建对象 在Javascript中,可以使用Object构造函数和字面量语法来创建一个对象。使用Object构造函数,可以使用ne…

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