首页 > 其他分享 >Vue路由的基本概念

Vue路由的基本概念

时间:2023-06-13 15:13:02浏览次数:48  
标签:Vue 守卫 组件 router 导航 基本概念 路由

Vue路由的基本概念

Vue 路由是一个非常重要的概念,它允许你在应用程序中创建多个页面并在这些页面之间进行导航。在 Vue 中,路由是通过 Vue Router 实现的。本文将介绍 Vue Router 的基本概念和用法,并对路由配置进行详细解析。

基础认知/路由

路由是指应用程序中的一个页面。在 Vue 中,路由通常由一个组件表示。

路由器

路由器是一个 JavaScript 对象,用于实现路由。在 Vue 中,路由器通常由 Vue Router 实现。

路由表

路由表是一个定义应用程序中所有路由的 JavaScript 对象。路由表指定了每个路由的路径、组件和其他参数。

路由参数

路由参数是指在路由路径中的动态部分。路由参数可以通过 $route.params 对象访问。

配置路由

要配置路由,你需要按照以下步骤操作:

路由的安装配置

安装 Vue Router

使用 npm 安装

npm install vue-router

使用 yarn 安装

yarn add vue-router

基础使用

创建路由表

在创建 Vue 应用程序之前,你需要创建一个路由表。路由表是一个 JavaScript 对象,用于定义应用程序中的所有路由。例如:

// src/router/index.js

import Vue from 'vue';
import Router from 'vue-router';
import Home from '@/views/Home.vue';
import About from '@/views/About.vue';

Vue.use(Router);

export default new Router({
  mode: 'history',
  routes: [
    {
      path: '/',
      name: 'home',
      component: Home,
    },
    {
      path: '/about',
      name: 'about',
      component: About,
    },
  ],
});

在上面的代码中,我们创建了一个名为 index.js 的文件,并在其中定义了一个路由表。该路由表由两个路由组成:一个用于主页(路径为 /)和一个用于关于页面(路径为 /about)。每个路由都指定了一个名称、一个组件以及其他参数(例如路径)。

在 Vue 应用程序中使用路由器

一旦你创建了路由表,你需要在 Vue 应用程序中使用路由器。为此,请在 main.js 文件中导入路由器,并将其传递给 Vue 实例,如下所示:

// src/main.js

import Vue from 'vue';
import App from '@/App.vue';
import router from '@/router';

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

在上面的代码中,我们将路由器作为选项传递给 Vue 实例。现在,你的应用程序已经配置好了路由器。
路由参数
路由参数是指在路由路径中的动态部分。例如,在以下路由中:

{
  path: '/users/:id',
  component: User,
}

:id 是一个路由参数。你可以通过 $route.params.id 访问该参数的值。例如,如果 URL 是 /users/123,则 $route.params.id 的值将是 123。

嵌套路由
嵌套路由是指一个路由中包含另一个路由。例如,以下路由表定义了一个名为 User 的父路由和一个名为 Profile 的子路由:

{
  path: '/user/:id',
  component: User,
  children: [
    {
      path: 'profile',
      component: Profile,
    },
  ],
}

在上面的代码中,User 路由包含一个名为 Profile 的子路由。当导航到 /user/:id/profile 时,将渲染 Profile 组件。

路由导航

在 Vue 中,路由导航是指在路由之间进行切换。你可以使用 元素或编程方式导航到一个路由。

元素是一个 Vue 组件,它允许你在应用程序中创建链接。例如:
<router-link to="/">Home</router-link>
<router-link to="/about">About</router-link>

在上面的代码中,我们使用 元素创建了两个链接,一个指向主页,一个指向关于页面。

编程式导航
你也可以使用编程式导航在路由之间进行切换。要导航到一个路由,你可以使用 $router.push() 方法。例如:

this.$router.push('/');

在上面的代码中,我们使用 $router.push() 方法将当前路由切换到主页。

路由守卫
路由守卫是指在路由导航期间执行的操作。你可以使用路由守卫来控制路由导航、检查用户身份验证以及执行其他操作。

全局路由守卫
全局路由守卫是指在所有路由导航期间执行的操作。你可以使用全局路由守卫来执行通用操作(例如检查用户是否已登录)。

const router = new VueRouter({ ... });

router.beforeEach((to, from, next) => {
  // 检查用户是否已登录
  if (!isAuthenticated && to.path !== '/login') {
    next('/login');
  } else {
    next();
  }
});

在上面的代码中,我们使用 router.beforeEach() 方法注册了一个全局路由守卫。该守卫检查用户是否已登录,如果没有登录,则将路由导航到登录页面。

路由独享守卫
路由独享守卫是指在单个路由导航期间执行的操作。你可以使用路由独享守卫来控制单个路由的导航。

const router = new VueRouter({
  routes: [
    {
      path: '/dashboard',
      component: Dashboard,
      beforeEnter: (to, from, next) => {
        // 检查用户是否有权限访问该路由
        if (!hasPermission) {
          next('/unauthorized');
        } else {
          next();
        }
      },
    },
  ],
});

在上面的代码中,我们在 Dashboard 路由上使用了 beforeEnter 守卫。该守卫检查用户是否有权限访问该路由,如果没有则将路由导航到未授权页面。

组件内守卫
组件内守卫是指在组件导航期间执行的操作。你可以使用组件内守卫来控制组件的导航。

export default {
  beforeRouteEnter(to, from, next) {
    // 在进入该组件之前执行操作
    next();
  },

  beforeRouteLeave(to, from, next) {
    // 在离开该组件之前执行操作
    next();
  },
};

在上面的代码中,我们在一个组件中使用了 beforeRouteEnter 和 beforeRouteLeave 守卫。这些守卫允许我们在进入和离开该组件之前执行操作。

路由使用过程中遇到的问题总结

一.跳转重复路由参数更改,页面无刷新的解决方案()

  1. 创建监听路由函数,路径发生变化后,动态去获取数据
  2. 给路由添加key值。可以在根路由上为其分配一个唯一key。采用$route.fullpath作为其唯一key。这样vue就回认为内部路由每个都是不同的路由,在跳转时便会强制刷新组件

二.路由跳转不生效或者跳转后页面没有内容显示。

这种情况可能是因为路由配置有误或者路由组件的代码存在问题。建议检查路由配置是否正确,组件代码是否存在语法错误或者逻辑问题。还可以通过在浏览器控制台查看错误信息来定位问题。

三.路由参数传递错误或者获取不到路由参数。

可能是因为路由参数传递方式不正确或者组件代码没有正确获取路由参数。建议检查路由参数的传递方式是否正确,组件代码是否正确获取路由参数。

四.路由切换时页面闪烁或者出现短暂的空白页面。

可能是因为路由组件的代码存在问题或者路由切换时加载的资源过多导致页面加载速度变慢。建议检查组件代码是否存在性能问题,优化组件代码。还可以通过使用异步组件、代码拆分等方式来优化页面加载速度。

五.路由权限控制不生效或者存在漏洞。

路由权限控制的代码存在问题或者路由配置有误。建议检查路由权限控制的代码是否正确,路由配置是否正确

作者:郭鹏浩

标签:Vue,守卫,组件,router,导航,基本概念,路由
From: https://www.cnblogs.com/DTCLOUD/p/17477550.html

相关文章

  • vue 报错 !!vue-style-loader!css-loader?{“sourceMap“:true}!.
    npmrundev报错Thesedependencieswerenotfound:*!!vue-style-loader!css-loader?{"sourceMap":true}!../../node_modules/vue-loader/lib/style-compiler/index?{"vue":true,"id":"data-v-858b20d4","scoped":true,......
  • 在使用VScode编辑器vue开发过程中,v-for在Eslint的规则检查下出现报错:Elements in iter
    报错如下: 该怎么解决呢?现在说说解决他的两种方法:1.直接在v-for循环后面绑定一个属性,跟前面需要循环的属性一一对应,截图如下:  2.在vscode中去掉Eslint规则检查,具体操作截图如下:文件–》首选项–》设置–》在搜索框中输入:vetur.validation.template,找到之后将前面的打钩......
  • vue中v-model理解
    1.原理v-model是语法糖,相当于以下代码<inputv-model="value>/>等价于<input:value="value"v-on:input="this.value=$event.target.value"/>v-bind:value实现数据从data->组件input触摸事件实现数据从组件->datav-model在内部为不同的输入元素使用不同的属性并抛......
  • 直播软件app开发,vue里tab菜单横向展示,可分页功能组件实现
    直播软件app开发,vue里tab菜单横向展示,可分页功能组件实现子组件: <template><div>  <el-buttonv-if="move!=0&&!dataLen"size='small'icon="el-icon-arrow-left"@click="navPrev"></el-button>   <ulref......
  • 创建vue工程
    一、创建项目(1)elementui elementui就是基于vue的一个ui框架,该框架基于vue开发了很多相关组件,方便我们快速开发页面。 网页链接:https://element.eleme.cn/#/zh-CN/component/installation ......
  • 云原生的基本概念及架构
    云原生技术是近年来迅速发展的一种技术体系,它可以帮助企业更快速、更高效地构建和管理应用程序。本文将介绍云原生的概念、架构和相关技术。一、云原生的概念云原生是一种新兴的应用程序开发和部署方式,它强调了应用程序的可移植性、可扩展性和自动化。云原生应用程序通常是基于容......
  • vue时间选择器 nut-datepicker
    vue时间选择器https://blog.csdn.net/Marshall_Ma/article/details/1242444511、年-月-日时:分效果展示:打开选择器:<divclass="label">记录日期:</div><nut-cell:showIcon="true":isLink="true"@click.native="switchPicker"......
  • 前端vue自定义简单实用下拉筛选 下拉菜单
    前端vue自定义简单实用下拉筛选下拉菜单, 下载完整代码请访问: https://ext.dcloud.net.cn/plugin?id=13020效果图如下:   ####使用方法```使用方法<!--titleArr:选择项数组dropArr:下拉项数组@finishDropClick:下拉筛选完成事件--><ccDropDownMenu:tit......
  • vue中使用axios获取不到响应头Content-Disposition的解决办法
    项目中,后端返回的文件流,fileName是机构名称+服务器时间。前端需要拿到响应头里的Content-Disposition字段的值,从中获取文件名在控制台Headers中可以看到相关的字段和文件名,但是在axios里面却获取不到 如果想要让客户端访问到相关信息,服务器不仅要在heade里添加,还要将它们在A......
  • vue实现的前端模糊匹配搜索
    vue实现的前端模糊匹配搜索<divid="app"><divclass="wrapper"><inputtype="text"v-model="searchText"><button@click="submit">搜索</button></div><table>......