Vue Router的详细解读之手把手教学篇(一)

这篇具有很好参考价值的文章主要介绍了Vue Router的详细解读之手把手教学篇(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        Vue Router是Vue项目开发中,重要的一环,在页面模块的模块化,数据参数的传递,等方面具有重要的作用,Vue是单页面应用,通过路由控制页面所展示的内容,下面让我们一起学习一下关于Vue Route的基础用法,其中包含博主的整理总结。

一、什么是Vue Router

用 Vue + Vue Router 创建单页应用非常简单:通过 Vue.js,我们已经用组件组成了我们的应用。当加入 Vue Router 时,我们需要做的就是将我们的组件映射到路由上,让 Vue Router 知道在哪里渲染它们

二、安装Vue Router

一般在Vue-cli创建项目时,会进行Router的安装

npm​

npm install vue-router@4

yarn​

yarn add vue-router@4

在main.js中引入Router,new Vue的时候将Router挂载到Vue的实例上,从而在项目开发的过程中,我们可以通过Vue.$route去触发Router的方法属性 

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

代码解析(纯纯干货,哈哈哈):首先,new的时候发生了什么,1.创建一个新对象2.将构造函数的作用域赋值给这个函数,因此this也指向了这个新对象3.执行构造函数的代码,为这个对象添加属性,4.返回这个对象

new Vue:也是基于Vue创建了一个新的Vue对象,并对用于传入的配置项和系统配置项进行合并,然后作用域赋值,然后给新对象添加属性,@方法,生命周期,监听事件,计算属性等,然后通过.$mount进行页面挂载,其中,render就是一个渲染函数,而createElement就是创建节点,App就是一般情况下Vue的html根文件,所以这里实质上就是将App这个html页面进行了渲染,当然在App页面中又有挂载的路由组件,进而可以渲染各种挂载的路由组件, 

三、router-link与router-view

router-link:通过router-link而不使用常规的a标签,是因为通过router-link来创建连接,可以在不重新加载页面的情况下更改 URL,处理 URL 的生成以及编码。

router-view:将显示与 url 对应的组件。你可以把它放在任何地方,以适应你的布局。

四、动态路由匹配

当通过Vue cli创建项目的时候,勾选了Vue router 之后会创建router文件夹

import Vue from 'vue'
import VueRouter from 'vue-router'
import HomeView from '../views/HomeView.vue'

Vue.use(VueRouter)

const routes = [
  {
    path: '/',
    name: 'home',
    component: HomeView
  },
  {
    path: '/about',
    name: 'about',
    // route level code-splitting
    // this generates a separate chunk (about.[hash].js) for this route
    // which is lazy-loaded when the route is visited.
    component: () => import(/* webpackChunkName: "about" */ '../views/AboutView.vue')
  }
]

const router = new VueRouter({
  routes
})

export default router

下面将基于此文件进行相关属性的分析。

1.带参数的动态路由匹配

路径参数

{
    path: '/:id',
    name: 'home',
    component: HomeView
  },

路径参数 用冒号 : 表示。当一个路由被匹配时,它的 params 的值将在每个组件中以 this.$route.params 的形式暴露出来。

这将表示/后面的值,将会作为参数传递给home组件,而不作为路径进行页面的跳转。也就表示/a与/b跳转到的都是home组件,不同的是传递过来的值不同。

参数的获取:通过$route.params.id获取路由传递过来的值

<div>{{ $route.params.id  }}</div>

2.响应路由参数的变化

推荐通过路由守卫进行对应数据的处理

<template>
  <div>{{ id }}</div>
</template>

<script>
export default {
  data() {
    return {
      id: "",
    };
  },
  created() {},
  //路由守卫处理数据
  beforeRouteEnter(to, from, next) {
    next((vn) => {
      vn.id = to.params.id;
    });
  },
};
</script>

<style>
</style>

3.设置404页面

通过*匹配所有未知路由

import Vue from 'vue'
import VueRouter from 'vue-router'
import HomeView from '../views/HomeView.vue'

Vue.use(VueRouter)

const routes = [
  
  {
    path: '/',
    name: 'home',
    component: HomeView
  },
  {
    path: '/about',
    name: 'about',
    // route level code-splitting
    // this generates a separate chunk (about.[hash].js) for this route
    // which is lazy-loaded when the route is visited.
    component: () => import(/* webpackChunkName: "about" */ '../views/AboutView.vue')
  },
  {
		path: "/404",
		component: () => import("@/views/404"),
	},
  { path: "*", redirect: "/404" }
]

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

export default router

五、路由的匹配语法

可以通过正则对路由进行匹配。

通过?修饰符将一个参数标记为可选的

下列代码可以匹配到/about路由

path: '/about/:id?',

 下列代码无法匹配到/about路由

path: '/about/:id',

六、编程式导航

除了使用 <router-link> 创建 a 标签来定义导航链接,我们还可以借助 router 的实例方法,通过编写代码来实现。其中router-link是声明式导航,通过router的实例方法称为编程式导航。

1.导航到不同的位置

在Vue中可以直接访问$router实例,所以可以直接调用实例的方法,实现页面的跳转。想要导航到不同的 URL,可以使用 router.push 方法。这个方法会向 history 栈添加一个新的记录,所以,当用户点击浏览器后退按钮时,会回到之前的 URL。

当你点击router-link时,内部会调用push这个方法。

声明式 编程式
<router-link :to="..."> router.push(...)

该方法的参数可以是一个字符串路径,或者一个描述地址的对象。例如:

// 字符串路径
router.push('/users/eduardo')

// 带有路径的对象
router.push({ path: '/users/eduardo' })

// 命名的路由,并加上参数,让路由建立 url
router.push({ name: 'user', params: { username: 'eduardo' } })

// 带查询参数,结果是 /register?plan=private
router.push({ path: '/register', query: { plan: 'private' } })

// 带 hash,结果是 /about#team
router.push({ path: '/about', hash: '#team' })

需要注意的是:如果提供了 pathparams 会被忽略,上述例子中的 query 并不属于这种情况。

如果想要在提供path的方式上传递params,需要提供路由的 name 或手写完整的带有参数的 path:

const username = 'eduardo'
// 我们可以手动建立 url,但我们必须自己处理编码
router.push(`/user/${username}`) // -> /user/eduardo
// 同样
router.push({ path: `/user/${username}` }) // -> /user/eduardo
// 如果可能的话,使用 `name` 和 `params` 从自动 URL 编码中获益
router.push({ name: 'user', params: { username } }) // -> /user/eduardo
// `params` 不能与 `path` 一起使用
router.push({ path: '/user', params: { username } }) // -> /user

2.替换当前位置

它的作用类似于 router.push,唯一不同的是,它在导航时不会向 history 添加新记录,正如它的名字所暗示的那样——它取代了当前的条目。

声明式 编程式
<router-link :to="..." replace> router.replace(...)

也可以直接在传递给 router.push 的 routeLocation 中增加一个属性 replace: true :

router.push({ path: '/home', replace: true })
// 相当于
router.replace({ path: '/home' })

 3.横跨历史,独断万古

可以通过.go()接收一个数字,指定前进后退几层。

为正数表示前进,负数表示后退。

4.路由命名

可以通过name属性指定路由名称,通过name属性进行传参以及跳转。

5.命名视图

可以通过多个router-view指定多个组件的展示,通过name标志显示那个组件。

<template>
  <h1>Named Views</h1>
  <ul>
    <li>
      <router-link to="/">First page</router-link>
    </li>
    <li>
      <router-link to="/other">Second page</router-link>
    </li>
  </ul>
  <router-view class="view one"></router-view>
  <router-view class="view two" name="a"></router-view>
  <router-view class="view three" name="b"></router-view>
</template>

<script>
export default {
  name: "App",
};
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  color: #2c3e50;
}

.router-link-active {
  color: orange;
}

.router-link-exact-active {
  color: crimson;
}
</style>

<style scoped>
ul {
  display: flex;
  list-style: none;
  padding: 0;
  margin: 0;
}

li:not(:last-of-type) {
  margin-right: 1rem;
}
</style>
import { createRouter, createWebHistory } from 'vue-router'
import First from './views/First.vue'
import Second from './views/Second.vue'
import Third from './views/Third.vue'

export const router = createRouter({
  history: createWebHistory(),
  routes: [
    {
      path: '/',
      // a single route can define multiple named components
      // which will be rendered into <router-view>s with corresponding names.
      components: {
        default: First,
        a: Second,
        b: Third,
      },
    },
    {
      path: '/other',
      components: {
        default: Third,
        a: Second,
        b: First,
      },
    },
  ],
})

七、路由重定向与别名

通过redirect属性进行路由重定向

之前在进行404页面配置的时候,其实已经进行过路由的重定向了。

 { 
		path: "/404",
		component: () => import("@/views/404"),
	},
  { path: "*", redirect: "/404" }

通过alias进行路由的别名。

当我们访问别名时的路由时,实际上访问的仍是当前路由。

重定向是指当用户访问 /home 时,URL 会被 / 替换,然后匹配成 /。那么什么是别名呢?

将 / 别名为 /home,意味着当用户访问 /home 时,URL 仍然是 /home,但会被匹配为用户正在访问 /

上面对应的路由配置为:文章来源地址https://www.toymoban.com/news/detail-480250.html

const routes = [{ path: '/', component: Homepage, alias: '/home' }]

到了这里,关于Vue Router的详细解读之手把手教学篇(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Git 使用教程:最详细、最正宗手把手教学(万字长文)

    一:Git 二:SVN与Git的的区别 三、安装Git 四:常规操作 五:远程仓库 六:创建与合并分支 七:bug分支 八:多人协作 九:git可视化工具 Git 是一种分布式版本控制系统,用于管理软件项目的源代码。它是由 Linux 之父 Linus Torvalds 开发的,并已经成为了现代软件开发领域中最流

    2024年02月16日
    浏览(47)
  • Linux虚拟机的安装与创建【超详细】【手把手教学】

    Linux操作系统于1991年,由芬兰的一个研究生 林纳斯 ● 托瓦兹(Linus Torvalds)开发,免费开源。 特点: 完全免费:源代码 多用户 多任务 良好的用户界面 支持多种平台 设备独立性 丰富的网络功能 完善的数据库和开发平台 安全性 可移植性 你所需要的所有虚拟机文件: 链接

    2024年02月08日
    浏览(46)
  • Mysql安装,以及可视化工具SQLyog配置,最详细的手把手教学

    MySQL :: MySQL Downloads 要是下载页面卡,可以使用百度网盘分享的mysql Mysql数据库版本:mysql 8.0.34 百度网盘分享: 链接:百度网盘 请输入提取码 提取码:free 选择自定义模式 选择合适的扩展到右边 点击超链接 Advanced Options,更改路径 执行即可 端口默认,加密选择默认推荐 输入

    2024年02月03日
    浏览(71)
  • 本地项目托管到 Gitee 详细步骤,手把手教学,就这一篇博客足够

    gitee官网: https://gitee.com/ 首先创建自己的账户密码, 记住账户密码 ,后面上传的时候可能会用到 【 + 】 = 【 新建仓库 】 = 【 按下图填信息 】 = 【 点击创建 】 4.1 首先 配置用户名和邮箱 ,用户名可任意,邮箱必须为可用邮箱 下面两条命令可以检查邮箱是否配置成功 注:

    2023年04月08日
    浏览(42)
  • Linux、CentOS超详细修改ip方法,手把手步骤教学,小白也能学会

    目录 1.切换root用户   1.1输入命令   1.2输入密码   1.2成功登录   1.3登录失败 2.使用root修改配置文件   2.1输入命令   2.2进入编辑模式    2.2.1修改BOOTPROTO    2.2.2修改ONBOOT    2.2.3修改ip和掩码等    2.2.4结果  2.3退出保存  2.4查看修改是否成功 ​3.重启网络服务 4.查看ip是否

    2024年02月07日
    浏览(60)
  • 手把手教学RRT*(RRTSTAR)三维算法MATLAB仿真(代码可直接运行,视频手把手教学)

            在我以前的作品里有关于RRT算法的视频和代码,今天主要讲解一下RRT*算法的原理。RRT*算法主要是在RRT算法的基础上加上了重写父节点和随机重连的两个步骤。具体的实现方式我想以视频的方式向大家讲解,个人感觉讲解的十分详细。视频连接在这里,希望大家看

    2024年04月17日
    浏览(46)
  • tps5430手把手教学

    TPS5430手把手教学 目录 一、buck电路原理 二、tps5430芯片介绍 1.1芯片引脚图 1.2芯片引脚说明 三、tps5430参考电路讲解以及PCB布局 1.正压降压(15V转12V) 1.1原理图 1.2器件选择 1.3PCB布局 2.正压降负压 2.1原理图 2.2PCB布局 2.3注意事项 BUCK电路原理: BUCK电路,又称降压式变换电路,

    2023年04月20日
    浏览(54)
  • Fabric 超级账本学习【2】Fabric2.4网络环境下部署自己编写的go语言链码并实例化测试(手把手教学,步骤超详细)

    搭建部署 Fabric2.4网络的具体教程可见我写的这篇博客: Fabric 超级账本学习【4】Ububtu环境下部署搭建 Hyperledger Fabric2.4 (2.X)区块链网络 1、前提是搭建好了Fabric 2.4(Fabric2.x)版本的区块链网络,并在以此环境下部署自己编写的链码,如下图先进入 test-network 文件夹目录下 2、

    2023年04月16日
    浏览(48)
  • ChatGPT推广指南,手把手教学

    网站登录流程我就不给大家赘述了,直接进入主题,全程干货仔细看 1.个人中心。点击右上角——“头像”——点击“个人中心” 2.推广链接。点击左侧菜单栏——“推广链接”,三条默认推广链接就是您的推广链接,将您的专属推广链接分享给需要的人即可。 3.好友列表。

    2023年04月12日
    浏览(36)
  • Git入门指南(手把手教学)

    Git是一种分布式版本控制系统,它是由Linus Torvalds为了管理Linux内核开发而开发的。与中心化的版本控制系统(如SVN)不同,Git是一种分布式系统,它将代码库(repository)复制到多个开发者的本地计算机上,每个开发者都有自己的代码库,可以在本地提交代码、管理分支、合

    2023年04月14日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包