首页 > 编程语言 >路由传参,路由重定向和模式,编程式导航,编程式导航传参

路由传参,路由重定向和模式,编程式导航,编程式导航传参

时间:2023-01-11 21:23:03浏览次数:49  
标签:传参 name 编程 component practice1 path 路由

路由传参

先配置好路由

在父组件种添加

<template>
  <div class="footer_wrap">
<!--    头部点击-->
    <div>
      <router-link to="/practice1">点击测试1</router-link>
      <router-link to="/practice2">点击测试2</router-link>
      <router-link to="/practice3">点击测试3</router-link>
      <router-link to="/practice4">点击测试4</router-link>
    </div>
    <br>
    <!--    点击对应路由组件显示-->
    <router-view></router-view>
  </div>
</template>

<script>
export default {
}
</script>

<style scoped>
.router-link-exact-active {
  background: #0dcaf0!important;
}
.footer_wrap a {
  flex: 1;
  text-decoration: none;
  padding: 20px 0;
  line-height: 20px;
  background-color: #333;
  color: #ccc;
  border: 1px solid black;
}
</style>

创建4个路由组件,点击的时候进行展示(路由组件中填写内容,便于区分)

配置对应路由的js文件

 

import Vue from "vue";
import VueRouter from "vue-router";
import practice1 from "@/views/practice1";
import practice2 from "@/views/practice2";
import practice3 from "@/views/practice3";
import practice4 from "@/views/practice4";
Vue.use(VueRouter)
const router = new VueRouter({
    routes : [
        {path:"/practice1",component:practice1},
        {path:"/practice2",component:practice2},
        {path:"/practice3",component:practice3},
        {path:"/practice4",component:practice4}
    ]
})
export default router

在mian.js中进行引入对应封装的路由配置进行引入

import Vue from 'vue'
import App from './04-路由传参'
// 切换到practice路由封装包上边
import router from "@/router/practice";

Vue.config.productionTip = false

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

开始传参

路由传参,有几种方式?两种

第一种方式query传参,父组件进行参数传递 /(传递链接)?传递的参数名=我们传递的参数 子组件进行接收$route.quer.传递的参数名

第二种方式params(路径传参)

1,路由规则里面提供占位符/:id/:name.../链接地址/:id/:name

2,在主组件种传递参数 /链接/(传递的参数1,对应:id)/(传递的参数2,对应:name)

3,接收参数,$route.params.id $route.params.name,进行id参数和name参数进行接收

使用query传参

父组件中写入传递的参数

      <router-link to="/practice1?name=学而时习之">点击测试1</router-link>

然后去组件practice1路由组件进行接收

<template>
<div>
  练习1 <br>
  {{this.$route.query.name}}
</div>
</template>

<script>
export default {
  name: "practice1",
  mounted() {
    console.log(this.$route) //使用this.$route获取路由传递的参数
    console.log(this.$route.query.name) //拿到传递的参数
  }
}
</script>

使用params进行传参(路径传参)需要修改路由配置

1,路由规则里面提供占位符/:id/:name.../链接地址/:id/:name

2,在主组件种传递参数 /链接/(传递的参数1,对应:id)/(传递的参数2,对应:name)

3,接收参数,$route.params.id $route.params.name,进行id参数和name参数进行接收

首先我们在主页面进行参数传递

      <router-link to="/practice2/王路飞/时不我待">点击测试2</router-link>

然后添加路由上的占位符

import Vue from "vue";
import VueRouter from "vue-router";
import practice1 from "@/views/practice1";
import practice2 from "@/views/practice2";
import practice3 from "@/views/practice3";
import practice4 from "@/views/practice4";
Vue.use(VueRouter)
const router = new VueRouter({
    routes : [
        {path:"/practice1",component:practice1},
        {path:"/practice2/:id/:name",component:practice2},
        {path:"/practice3",component:practice3},
        {path:"/practice4",component:practice4}
    ]
})
export default router

最后practice2页面进行渲染

<template>
<div>
  练习2 <br>
  {{$route.params.id}}
  {{$route.params.name}}
</div>
</template>

<script>
export default {
  name: "practice2",
  mounted() {
    console.log(this.$route)  //获取传递参数的位置
    console.log(this.$route.params.id)  //获取到id的参数
    console.log(this.$route.params.name)  //获取到name的参数
  }
}
</script>

路由的重定向和模式

路由重定向

什么是重定向,当用户输入指定URl路径的时候,我们重定向到指定的路径,我们定向的为这个URL进行页面指定,不用输入hash值后边的数字

如何使用重定向,我们在路由规则的routes中添加一个新的对象

path后边指定访问的路径,(也就是URL输出的路径),指定的路径也就是我们vue启动时候的路径,没有后边的哈希值

const router = new VueRouter({
    routes : [
        {path:"/practice1",component:practice1},
        {path:"/practice2/:id/:name",component:practice2},
        {path:"/practice3",component:practice3},
        {path:"/practice4",component:practice4},
        /**
         * 1,(2)路由-重定向和模式,命中指定路径的时候,我们重定向到指定的路径
         * 2,在routes中添加一个新的对象
         * 3,path 后边指定访问的路径(也就是URL输出的路径),指定的路径http://localhost:8080/(没有哈希值)
         * 4,我们定向到指定的页面,当输入这个URL进行这个页面访问
         */
        {path:"/",component:practice1}
    ]
})

路由设置页面404(配置路由)

1,404页面,我们要新创建一个404的路由组件,(也就是404的时候展示的页面)

2,在routes中添加一个新对象

3,path : ' * ',匹配所有的路径

4,当所有的路径匹配不上的时候,展示404的路由组件

import NotFound from "@/views/NotFound";

const router = new VueRouter({ routes : [ {path:"/practice1",component:practice1}, {path:"/practice2/:id/:name",component:practice2}, {path:"/practice3",component:practice3}, {path:"/practice4",component:practice4}, {path:"/",component:practice1}, /** * 1,404页面,新建一个NotFound路由组件(也就是404的时候展示的页面) * 2,在routes中添加一个新对象 * 3,path:'*',匹配所有的路径 * 4,当所有路径匹配不上的时候,展示NotFound路由组件 */ {path:"*",component:NotFound} ] })

 配置路由的模式

 配置路由模式,默认是hash模式,我们配置成history模式

两个模式的区别hash模式URL上边是有一个#号,后边跟上hash值,但是history模式后边是没有#号的

如何配置,还是在配置路由的地方,中添加mode:样式这样就可以了,不要添加routs里边,放在外边

路由编程式导航

vue路由编程式导航
通过js事件进行跳转到其他页面,我们在practice3和practice4中创建一个点击事件,跳转到practice1链接中
声明式导航:通过a链接进行页面的转跳,也就是URl对应一个路由组件
编程式导航:通过js事件跳转,通过js事件跳转到对应的URL链接上
编程式导航也有两种办法进行转跳,使用path和URL指定名称进行跳转
1,使用path进行指定页面的跳转
(1)在practice3中添加一个点击事件,进行跳转
(2)在点击按钮中添加this.$router.push({path : '/practice1' (转跳到的页面)})) 进行跳转
2,使用name值进行转跳,需要到路由中进行配置
(1)在practice4添加一个点击事件,然后去路由中配置。给需要转跳到的页面,后边添加name的值
(2)在practice4的点击事件中添加,this.$router.push({name : '(添加的name值)'})

 使用path进行指定页面的跳转,在practice3中进行按钮声明

<template>
<div>
  练习3 <br>
  <button @click="dian">点我转跳测试1页面</button>
</div>
</template>

<script>
export default {
  name: "practice3",
  methods : {
    dian () {
      this.$router.push({
        path : '/practice1' //进行转跳的页面
      })
    }
  }
}
</script>

<style scoped>

</style>

 使用name进行指定页面的跳转,在practice4中进行按钮声明,然后配置对应URL的name

我们先去practice4中添加点击事件

<template>
<div>
  练习4 <br>
  <button @click="dian">点我转跳测试1页面</button>
</div>
</template>

<script>
export default {
  name: "practice4",
  methods : {
    dian () {
      this.$router.push({
        name : "toPractice1"
      })
    }
  }
}
</script>

<style scoped>

</style>

然后去修改路由配置

    routes : [
        {path:"/practice1",component:practice1,name:"toPractice1"},
        {path:"/practice2/:id/:name",component:practice2},
        {path:"/practice3",component:practice3},
        {path:"/practice4",component:practice4},
        {path:"/",component:practice1},
        {path:"*",component:NotFound}
    ]

编程式传参

编程式导航传参,practice3页面的点击事件,对practice1页面进行传参,触发点击事件的时候进行传参
编程式导航传参也有两周方式:1,query传参;2,params配置项传参
1,query传参
(1)再点击事件中添加:this.$router.push(path:'/practice1',query:{useName:`红发香克斯`})
当我们点击按钮的时候,进行转跳和传递参数
(2)在practice1中添加{{this.query.usrName}}进行接收
2,params配置项传参,参数不会出现在URL上;支支持name;刷新丢失;接收使用$route.params
(1)因为只支持编程式导航的name属性,所以我们写在practice4上,practice3上进行测试
(2)在点击事件中添加,this.$router.push({name:`toPractice1`,params:{useName:`小丑皇巴基`}})
(3)在practice1中添加,{{$route.params.useName}},进行接收

编程式query传参

我们先在practice3进行传参

<template>
<div>
  练习3 <br>
  <button @click="dian">点我转跳测试1页面</button>
</div>
</template>

<script>
export default {
  name: "practice3",
  methods : {
    dian () {
      this.$router.push({
        path : '/practice1', //进行转跳的页面
        query:{useName:`红发香克斯`} //进行传递参数
      })
    }
  }
}
</script>

<style scoped>

</style>

在practice1中进行接收

  {{this.$route.query.useName}}

编程式params配置项传参

先去practice4中进行传参

<template>
<div>
  练习4 <br>
  <button @click="dian">点我转跳测试1页面</button>
</div>
</template>

<script>
export default {
  name: "practice4",
  methods : {
    dian () {
      this.$router.push({
        name : "toPractice1",
        params : {useName:`小丑皇巴基`}
      })
    }
  }
}
</script>

<style scoped>

</style>

然后去practice1中进行参数接收

  {{this.$route.params.useName}}

测试使用params在path中进行传参

  methods : {
    dian () {
      this.$router.push({
        path : '/practice1', //进行转跳的页面
        // query:{useName:`红发香克斯`} //进行传递参数
        // 我们的practice3使用的是path进行页面转跳的
        params : {useName:`红发香克斯`} //我们使用params进行传参
      })
    }
  }
  {{this.$route.params.useName}}

这里是拿不到获取的值的,因为path使用的URl后边进行拼接的,但是使用params后边没有拼接,所以页面也拿不到数据

 

标签:传参,name,编程,component,practice1,path,路由
From: https://www.cnblogs.com/hgng/p/17044798.html

相关文章

  • 【编程】大端小端模式
    一句话:低位的数据保存到高位上,就是装大尾巴狼,就是大端。 数据:11223344(尾端是44)保存在寄存器:(左边是高地址)44332211  (右边是低地址) --大端保存在寄存器:(左边是高地址......
  • react event 防抖传参
    //echarts图表设置完毕后,添加事件监听,才用lodash.js的防抖函数useEffect(()=>{constzrMouseMove=(event)=>{console.log('[测试]event',e......
  • C# .net core(.net 6) swagger 路由中版本{version}转换对应版本
    问题描述:在controller中使用了Versioning版本控制,在swagger页面显示时未转化为对应版本。示例:      转换为:   实现方法: 在注册Swagger时‘builder.......
  • Spring 缓存 key 使用数组传参
    出错使用@Override@Cacheable(cacheNames="cacheName",key="T(java.lang.String).join(#envKey)")publicObjectjoin(String...envKey){r......
  • 2.多线程编程的目标与挑战
    一.串行、并行与并发 串行:单工作者依次执行多个任务(一个任务执行完成再执行下一个任务)。 并行:多工作者同时执行多个任务(每个工作者执行一个任务)。 并发:单工作者交替......
  • 场景编程集锦 - BMI指数与健身达人
    1.场景描述  BMI指数(身体质量指数,英文BodyMassIndex)是用体重公斤数除以身高米数的平方得出的数字,是目前国际上通用的衡量人体胖瘦程度以及是否健康的一个标准。“身......
  • ubuntu 路由优先级
    由于在虚拟机里用了三个网络,分别是nat,仅主机,和桥拉nat用于上网,桥接用于连接网络摄像头调试程序,配置了两个网关,但看路由路数,桥接的比nat优先,导致访问不了网络了......
  • 不用VS,使用NET 7.0 SDK (v7.0.101)编程c#控制台应用程序方法
    摘要:如果没有vs环境,也可以编程c#控制台应用程序学习c#,方法步骤有下面几个步骤。1、下载NET7.0SDK(v7.0.101)安装网址https://dotnet.microsoft.com/zh-cn/download/do......
  • 强哥说Java--网络编程
    网络编程​​网络编程概述​​​​网络通信要素概述​​​​通信要素1:IP和端口号​​​​ip地址​​​​端口号​​​​InetAddress类​​​​实例​​​​通信要素2:网......
  • 极客编程python入门-图形界面
    图形界面Python支持多种图形界面的第三方库,包括:Tk、wxWidgets、Qt、GTK等等。第一步是导入Tkinter包的所有内容:fromtkinterimport*第二步是从​​Frame​​​派生一个​......