首页 > 其他分享 >vue2 路由基础 -- 基础使用

vue2 路由基础 -- 基础使用

时间:2024-06-06 12:30:28浏览次数:27  
标签:name -- params vue2 path router 路由 view

@[TOC](vue2路由(一) – 基础使用)

vue 使用 vue-router 插件处理路由,路由是开发单页应用必须掌握的知识。

什么是 vue-router?

(1)vue-routerVue 官方提供前端路由插件,借助它我们实现可以基于路由和组件的单页面应用。

(2)它与传统的页面区别在于:

  • 传统的页面应用采用的是后端路由,即通过超链接来实现页面切换和跳转的。
  • 而在 vue-router 单页面应用中,则是通过路径之间的切换(实际上就是组件的切换)。

router-link 和 router-view 组件

router-link 是一个 a (链接)标签的封装, router-view 是路由视图,渲染 router-link 匹配到的组件,可配合使用 <transition><keep-alive> 使用。

更多详细信息

路由配置

动态路由

路由对象为:

{
  path: '/argu/:name',
  // 使用 import 动态引入路径对应的组件,起到懒加载的作用
  component: () => import('@/views/ArguPage')
}

可在该路由的 组件 中这样获取 name 的值:

$route.params.name //给同一个组件设置传递不同的params,实现组件的复用

$route 是当前路由,可用 watch 在组件中监它的变化,有一个 params 属性,值一个包含动态路由的对象。

watch: {
  '$route'(to) {
    console.log(to);
    //将路由的 params 属性赋值给组件的 data 属性
    to.params && to.params.view && (this.effect = to.params.view)
  },
}

嵌套路由

在路由对象中添加一个 children 属性,值是一个数组,可包含多个子路由。 子路由 path 前面不能有 / 。 父级路由对应的组件必须有路由出口,即 router-view。

命名路由

路由对象中的 name 属性是路由的名字,可用该名字指定路径。
在 router-link 的 to 属性 动态绑定 路由对象

<router-link :to="{name:'home'}"></router-link>

命名视图

route-view 是路由视图,只有一个视图时,路由匹配的组件在该视图中渲染,多个视图则要对视图进行命名。

<!-- 视图渲染组件,该组件内不需要房子任何内容,可写成只闭合标签-->
<router-view />
<!-- 有多个路由视图需要匹配,则用命名视图 -->
<router-view name="sister"></router-view>
<router-view name="brother"></router-view>

路由对象:

{
  path: '/name/view',
  name: 'name_view',
  // 注意命名视图的 components 和 组件的 component 的区别
  components: {
    // 不给 router-view 设置 name 属性,name 值就是 default
    default: () => import('@/views/ChildPage'),
    sister: () => import('@/views/SisterPage'),
    brother: () => import('@/views/BrotherPage'),
  }
}

JS 操作路由

路由对象 $router 有多个函数 push go replace

push 可导航到不同的页面,会将该路径进入历史记录。
$router.pushwindow.history.pushSate 一样。
push 可接受不同的参数:

//字符串路径
this.$router.push('home')

// 路由对象
this.$router.push({
  path: 'home'
})

// 命名路由加参数
this.$router.push({
  name: 'argu',
  params: {
    name: 'jack'
  }
})
//  path 路由和 query
this.$router.push({
  path: 'argu',
  query: {
    name: 'jack'
  }
})
//  path  和 params 不可一起使用,params 会被忽略
this.$router.push({
  path: 'argu',
  params: {
    name: 'jack'
  }
})
this.$router.push({
  name: 'argu',
  query: {
    name: 'jack'
  }
})

go 的参数是一个整数,表示回退或者前进多少历史记录。

// 在浏览器记录中前进一步,等同于 history.forward()
$router.go(1)

// 后退一步记录,等同于 history.back()
$router.go(-1)

// 前进 3 步记录
$router.go(3)

// 如果 history 记录不够用,那就默默地失败呗
$router.go(-100)
$router.go(100)

router.replace(location) = window.history.replaceState

跟 router.push 很像,唯一的不同就是,它不会向 history 添加新记录,而是跟它的方法名一样 —— 替换掉当前的 history 记录

使用场景:不需要用户回退的情况,比如权限验证。

// 路由名字
this.$router.replace('name_view')
// 字符串路径
this.$router.replace('/name/view')
// 路由对象
this.$router.replace({
  path: '/name/view'
})
// 命名路由带 params
this.$router.replace({
  name: 'name_view',
  params: {
    age: 24
  }
})
// path 和 query
this.$router.replace({
  path: 'name_view',
  query: {
    age: 24
  }
})
// this.$router.replace({path:'/name/view',params:{age:24}});

重定向和别名

// 路由重定向:访问 /index ,重定向到 /
{
  path: '/index',
  redirect: '/'
}

redirect 也可设置一个对象:

{
  path: '/index',
  redirect: {
    name: 'home'
  }
}

redirect 还可以设置为一个函数,传递一个参数 to, 可根据该对象的不同值,重定向到不同的页面,返回一个 命名路由 或者 字符串路径

{
  path: '/index',
  redirect: to => {
    // do something with to
    return {
      name: 'home'
    }
  }
}

to 是一个包含路径参数的对象:

{
  "name": "index",
  "meta": {}, // 路由元数据,可在全局导航守卫中获取该对象,然后不同页面设置不同的值,比如设置页面的标题
  "path": "/index", // 路由路径 解析为绝对路径 /a/b
  "hash": "", // 书签
  "query": {}, // 查询参数 /a?user=jack, $route.query.uer 的值为 jack
  "params": {}, //
  "fullPath": "/index", // 完整路径
  "matched": [
    {
      // 当前路由的所有嵌套路径片段的路由记录,路由记录就是路由的副本。
      "path": "/index",
      "regex": {
        "keys": []
      },
      "components": {},
      "instances": {},
      "name": "index",
      "meta": {},
      "props": {}
    }
  ],
  "redirectedForm": "" // 重定向来源的名字
}
router.beforeEach((to, from, next) => {
  console.log('①,全局前置守卫,beforeEach')
  //给每个页面设置不同的标题,标题就从 meta 中获取
  //setTitle = (title)=>{
  // window.document.title=title||'admin'
  //}
  to.meta && setTitle(to.meta.title)
  next(() => {
    console.log('②,全局前置守卫,beforeEach')
  })
})
路径别名
{
  name: 'home',
  alias: 'home_page', // 路径别名
  path: '/',
  component: Home
}

常见面试题

route 是当前路由, 就是你设置路由时的那个 routes 里的元素,参数在这里获取。

router 是全局路由对象,就是我们 new 出来的那个对象。常见的路由方法在这里获取。

this. r o u t e 是 t h i s . route 是 this. route是this.router.options.routes 里的一个元素。

标签:name,--,params,vue2,path,router,路由,view
From: https://blog.csdn.net/JackZhouMine/article/details/139496925

相关文章

  • Sz-Admin | SpringBoot3 JDK21 Vue3开源后台RBAC管理系统 | 2024年好用的开源RBAC管理
    简介接触了很多优秀的开源和闭源项目,在使用过程中也发现一些问题,不甘满足的我遂产生了想法:于是利用休息时间编写了一套后台管理系统,它灵活、简洁、高效,拥抱最新的技术,因此Sz-Admin便诞生了,也意为升职Admin,升职加薪节节高。SzAdmin,一个基于SpringBoot3、Vue3和El......
  • 在 Jupyter 编辑函数(Edit function in Jupyter)
    在JupyterNotebook里编辑一个已经存在的函数是可以实现的。你需要重新定义这个函数并执行该单元格。这将覆盖之前的定义,使用新的代码。例如,如果你有一个函数fetch_california_housing,你可以按照以下步骤编辑和重新定义它:找到该函数的定义单元格,或者创建一个新的单元格......
  • Mysql基础教程(14):UNION
    MySQLUNION的用法与实例在本文中,我们讨论在MySQL中对两个结果集进行UNION运算,以及UNION运算的规则。在MySQL中,UNION操作符是一个集合操作符,它用于合并【2个结果集】中的所有的行。SQL标准中定义了3个集合操作符:UNION,INTERSECT和MINUS。目前MySQL......
  • 快速排序——AcWing785.快速排序
    AcWing785.快速排序题目描述785.快速排序-AcWing题库运行代码#include<iostream>#include<algorithm>usingnamespacestd;constintN=1e6+6;intq[N];voidquick_sort(intq[],intl,intr){if(l>=r)return;intm=l+r>>1;//>......
  • 从查询中删除作者 ID
    我有一些文章的作者被指定为共同作者。如果我想在我的作者页面上显示他们,他们却没有被列出。因为查询中的这个条件:AND(wp_posts.post_author=53)AND(wp_posts.post_author=53)我该如何删除它?或者有没有更好的解决方案?publicstaticfunctionpre_get_posts($query)......
  • 回退背包专题
    P4141消失之物题目意思,就是说有n个物品,然后每个物品都有自己的体积w[i],然后问你,如果第i个物品丢了之后,还能够装满这个背包的方法,然后遍历一遍i同时也要遍历一遍背包,因为背包的值是在1到m之间的任意值,对于同一个物品丢失,中间结果不需要用加空格隔开,就是连在一起题解:这是一......
  • 普鲁米预览失败:出现 1 个错误:* 配置 Terraform AWS 提供程序:未找到 Terraform AWS 提
    我遇到了这样一个问题:当我尝试运行命令将资源导入现有的pulumi堆栈时,预览总是失败错误如下类型名称计划信息pulumi:pulumi:堆栈dev1错误-aws:ebs:Volumeidimport1错误诊断:pulumi:pulumi:Stack(dev):error:预览失败:出现1个错误:*配置TerraformAWS提......
  • 如何识别 SQL 中的重复值
    我正试图查找特定数据集中生成的重复数据我最初的查询是SELECTb.admidate,a.token_person_id、COUNT(DISTINCT(a.token_person_id))ASpatientCountFROMnew_alzheimers_agegroup2aLEFTJOIN住院病人映射bONb.token_person_id=a.token_perso......
  • Spring 云网关 MVC 异常处理
    我正在编写一个使用SpringCloudGatewayMVC构建的APIGateway应用程序。我使用了一个自定义的CircuitBreaker过滤器,该过滤器可在后端请求耗时过长时超时。我发现当请求超时时......我无法通过向客户端发送JSON格式的响应来优雅地处理失败。我拥有带有Exce......
  • 如何优化这种简单的多值 simd 溅射/广播?
    我想将一些u8扩展为u64,但我想要的不是直接支持的零扩展或符号扩展,而是"复制扩展"。有什么好办法可以做到这一点(在使用avx512的intelcpus上)?示例代码使用的是rust语言,但宿主语言并不是最有趣的部分。#![feature(portable_simd)]#!使用std::simd::*;......