vue学习记录④(路由传参)

2024-06-20 02:38

本文主要是介绍vue学习记录④(路由传参),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

通过上篇文章对路由的工作原理有了基本的了解,现在我们一起来学习路由是如何传递参数的,也就是带参数的跳转。

带参数的跳转,一般是两种方式:

①.a标签直接跳转。

②点击按钮,触发函数跳转。

在上篇文章中我们已经有两个页面(Helloworld.vue&Hello.vue),现在我准备往Hello.vue里面添加3个链接,分别对应两种情况的跳转。

 第一步:在原来的Hello.vue里添加路由链接跳转的代码(见第38-44行代码),添加后的Hello.vue代码如下:

 1 <template>
 2   <div class="hello">
 3     <h1>{{ msg }}</h1>
 4     <h2>Essential Links</h2>
 5     <ul>
 6       <li>
 7         <a href="https://vuejs.org" target="_blank">Core Docs</a>
 8       </li>
 9       <li>
10         <a href="https://forum.vuejs.org" target="_blank">Forum</a>
11       </li>
12       <li>
13         <a href="https://chat.vuejs.org" target="_blank">Community Chat</a>
14       </li>
15       <li>
16         <a href="https://twitter.com/vuejs" target="_blank">Twitter</a>
17       </li>
18       <br>
19       <li>
20         <a href="http://vuejs-templates.github.io/webpack/" target="_blank">Docs for This Template</a>
21       </li>
22     </ul>
23     <h2>Ecosystem</h2>
24     <ul>
25       <li>
26         <a href="http://router.vuejs.org/" target="_blank">vue-router</a>
27       </li>
28       <li>
29         <a href="http://vuex.vuejs.org/" target="_blank">vuex</a>
30       </li>
31       <li>
32         <a href="http://vue-loader.vuejs.org/" target="_blank">vue-loader</a>
33       </li>
34       <li>
35         <a href="https://github.com/vuejs/awesome-vue" target="_blank">awesome-vue</a>
36       </li>
37     </ul>
38     <div>
39       <router-link :to="{path:'/helloworld/123'}">参数传递1</router-link>
40       <br>
41       <router-link :to="{path:'/helloworld/789',query:{userid:9527,name:'Tom_Lo'}}">参数传递2</router-link>
42       <br>
43       <button @click="toNewpage">点击跳转</button>
44     </div>
45   </div>
46 </template>
47 
48 <script>
49 export default {
50   name: 'hello',
51   data() {
52     return {
53       msg: 'Welcome to Your Vue.js App'
54     }
55   },
56    methods: {
57     toNewpage: function() {
58       
59       this.$router.push({ path: '/helloworld/999', query: { userid: 128, name: 'Tom' } });
60     }
61   }
62 }
63 </script>
64 
65 <!-- Add "scoped" attribute to limit CSS to this component only -->
66 <style scoped>
67 h1,
68 h2 {
69   font-weight: normal;
70 }
71 
72 ul {
73   list-style-type: none;
74   padding: 0;
75 }
76 
77 li {
78   display: inline-block;
79   margin: 0 10px;
80 }
81 
82 a {
83   color: #42b983;
84 }
85 </style>

第38-44行代码的路由链接跳转写法是固定的,记住会用就好了。<router-link>默认会被渲染成一个 `<a>` 标签 ,to指令跳转到指定路径 。

第二步:Hello.vue传递了参数,那么我们就用Helloworld.vue接收参数。见更新后的Helloworld.vue代码:

 1 <!--模板部分-->
 2 <template>
 3   <div class="container">
 4     <h1>hello,world!</h1>
 5     <p>{{test}}</p>
 6     <p>接收的参数id:
 7       <span class="hint">{{id}}</span>
 8     </p>
 9     <p>接收的参数userid:
10       <span class="hint">{{userid}}</span>
11     </p>
12     <p>接收的参数name:
13       <span class="hint">{{username}}</span>
14     </p>
15   </div>
16 </template>
17 <!--js部分-->
18 <script>
19 export default {
20   name: 'helloworld',
21   data() {
22     return {
23       test: 'this is a test',
24       id: this.$route.params.id,//接收参数
25       userid: this.$route.query.userid,
26       username: this.$route.query.name
27     }
28   }
29 }
30 </script>
31 <!--样式部分-->
32 <style>
33 .container {
34   background: #aaa;
35   color: blue;
36 }
37 </style>

上面的第6-14行就是接收参数的容器。

注意:Hello.vue中的$router是用来传递参数的,而Helloworld.vue中的$route是用来接收参数的。

第三步:路由变化了,当然还得在index.js里面体现(见第16行),见更新后的index.js代码:

 1 import Vue from 'vue'
 2 import Router from 'vue-router'
 3 import Hello from '@/components/Hello'
 4 import HelloWorld from '@/components/Helloworld'//我们新定义的组件
 5 
 6 Vue.use(Router)
 7 
 8 export default new Router({
 9   routes: [
10     {
11       path: '/',
12       name: 'Hello',
13       component: Hello
14     },
15     {//新路由
16       path: '/helloworld/:id',
17       name: 'HelloWorld',
18       component: HelloWorld
19     }
20   ]
21 })

 第四步:入口文件App.vue不用动。路由定义、发送参数、接收参数都具备了,下面咱们就跑一下试试吧~~

运行跳转成功后如下图:

 

 

通过图示我们看到,参数都可以正常拿到了。

同时注意url的变化。首先url是有个#号,这个就代表是单页面的路由(hash模式);然后我们的参数实际都是放在url上传输的,要注意别超出url的长度范围。

下面我们再来看下子路由。

子路由也就是在父页面下,单独划出一个div容器,里面再塞进一个路由。

我们把Helloworld设定为父路由,再设定两个两个子路由。分别是info和content。

 更新后的Helloworld.vue代码如下:

 1 <!--模板部分-->
 2 <template>
 3   <div class="container">
 4     <h1>hello,world!</h1>
 5     <p>{{test}}</p>
 6     <p>接收的参数id:
 7       <span class="hint">{{id}}</span>
 8     </p>
 9     <p>接收的参数userid:
10       <span class="hint">{{userid}}</span>
11     </p>
12     <p>接收的参数name:
13       <span class="hint">{{username}}</span>
14     </p>
15     <div class="subrouter">
16       <h2 class="hint">子路由:</h2>
17       <router-view></router-view>
18     </div>
19   </div>
20 </template>
21 <!--js部分-->
22 <script>
23 export default {
24   name: 'helloworld',
25   data() {
26     console.log(this.$route);
27     return {
28       test: '这是一个测试',
29       id: this.$route.params.id,//接收参数
30       userid: this.$route.query.userid,
31       username: this.$route.query.name
32     };
33   }
34 }
35 </script>
36 <!--样式部分-->
37 <style>
38 .container {
39   background: #ccc;
40   color: greenyellow;
41   height: 500px;
42 }
43 
44 .hint {
45   color: darkred;
46   font-weight: bold;
47 }
48 
49 .subrouter {
50   background: #aaa;
51   width: 500px;
52   height: 100px;
53   margin: 0 auto;
54 }
55 </style>

第15-18行创建了子路由的容器。然后在components下,创建新目录subpage,并在subpage下新建两个子组件info.vue和content.vue。

info.vue代码如下:

<template>
<div class="info">info page--id:{{id}}</div>
</template>
<script>
export default {
name: 'info',
data () {
return {
id: this.$route.params.id
}
}
}
</script>
<style>
.info{
color:blue;
}
</style>

content.vue代码如下:

<template>
<div class="content">
content page
<div>ID:{{id}}</div>
</div>
</template>
<!--js部分-->
<script>
export default {
name:'content',
data() {
return {
id:this.$route.params.id
};
}
}
</script>
<style>
.content{
color:blueviolet;
}
</style>

子路由建好了,那怎么把他们串起来呢?这里就要更新index.js了。index.js代码如下:

import Vue from 'vue'
import Router from 'vue-router'
import Hello from '@/components/Hello'
import HelloWorld from '@/components/Helloworld' //我们新定义的组件
// 引入子页面
import Info from '@/components/subpage/info.vue'
import Content from '@/components/subpage/content.vue'
Vue.use(Router)
export default new Router({
routes: [{
path: '/',
name: 'Hello',
component: Hello
},
{ //新路由
path: '/helloworld/:id',
name: 'HelloWorld',
component: HelloWorld,
children: [{
path: 'info/:id',
component: Info
},
{
path: 'content/:id',
component: Content
}
]
}
]
})

首先要引入子页面,然后在父路由下配置一下即可。

到了这里就算是配置好了,运行看看吧~~~~

 

这篇关于vue学习记录④(路由传参)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1076871

相关文章

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2

Go路由注册方法详解

《Go路由注册方法详解》Go语言中,http.NewServeMux()和http.HandleFunc()是两种不同的路由注册方式,前者创建独立的ServeMux实例,适合模块化和分层路由,灵活性高... 目录Go路由注册方法1. 路由注册的方式2. 路由器的独立性3. 灵活性4. 启动服务器的方式5.

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

关于Spring @Bean 相同加载顺序不同结果不同的问题记录

《关于Spring@Bean相同加载顺序不同结果不同的问题记录》本文主要探讨了在Spring5.1.3.RELEASE版本下,当有两个全注解类定义相同类型的Bean时,由于加载顺序不同,最终生成的... 目录问题说明测试输出1测试输出2@Bean注解的BeanDefiChina编程nition加入时机总结问题说明

CSS弹性布局常用设置方式

《CSS弹性布局常用设置方式》文章总结了CSS布局与样式的常用属性和技巧,包括视口单位、弹性盒子布局、浮动元素、背景和边框样式、文本和阴影效果、溢出隐藏、定位以及背景渐变等,通过这些技巧,可以实现复杂... 一、单位元素vm 1vm 为视口的1%vh 视口高的1%vmin 参照长边vmax 参照长边re

CSS3中使用flex和grid实现等高元素布局的示例代码

《CSS3中使用flex和grid实现等高元素布局的示例代码》:本文主要介绍了使用CSS3中的Flexbox和Grid布局实现等高元素布局的方法,通过简单的两列实现、每行放置3列以及全部代码的展示,展示了这两种布局方式的实现细节和效果,详细内容请阅读本文,希望能对你有所帮助... 过往的实现方法是使用浮动加

css渐变色背景|<gradient示例详解

《css渐变色背景|<gradient示例详解》CSS渐变是一种从一种颜色平滑过渡到另一种颜色的效果,可以作为元素的背景,它包括线性渐变、径向渐变和锥形渐变,本文介绍css渐变色背景|<gradien... 使用渐变色作为背景可以直接将渐China编程变色用作元素的背景,可以看做是一种特殊的背景图片。(是作为背

关于Gateway路由匹配规则解读

《关于Gateway路由匹配规则解读》本文详细介绍了SpringCloudGateway的路由匹配规则,包括基本概念、常用属性、实际应用以及注意事项,路由匹配规则决定了请求如何被转发到目标服务,是Ga... 目录Gateway路由匹配规则一、基本概念二、常用属性三、实际应用四、注意事项总结Gateway路由

CSS自定义浏览器滚动条样式完整代码

《CSS自定义浏览器滚动条样式完整代码》:本文主要介绍了如何使用CSS自定义浏览器滚动条的样式,包括隐藏滚动条的角落、设置滚动条的基本样式、轨道样式和滑块样式,并提供了完整的CSS代码示例,通过这些技巧,你可以为你的网站添加个性化的滚动条样式,从而提升用户体验,详细内容请阅读本文,希望能对你有所帮助...