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学习记录④(路由传参) 的全部内容, 来源链接: utcz.com/z/377804.html