安静地努力!!!
【25.Vue Router--路由的query参数
】
多级路由在src/router/index.js
中【三级路由】的配置如下:
// 该文件专门用于创建整个应用的路由器
import VueRouter from "vue-router";
//引入组件
import About from '../pages/About'
import Home from '../pages/Home'
import Cartoon from '../pages/Cartoon'
import Stars from '../pages/Stars'
import Detail from '../pages/Detail'
//创建并暴露一个路由器
export default new VueRouter({
// 定义一些路由
// 每个路由都需要映射到一个组件。
routes: [//配置路由路径和路由组件{path: '/about',component: About, //要跳转到的组件 },{path: '/home',component: Home,children:[{name:'Hcartoon',path: 'cartoon',component: Cartoon,},{path:'stars',component: Stars,children:[{path:'detail',component: Detail,},]}],}
]
})
- 我们如何把二级路由里Stars组件的数据starList,传递给下一级路由的Detail组件?
路由下的Stars组件中,配置如下:
Stars.vue中存储的数据和传递数据方法
data() {return {starList: [{ id: '001', title: '周星驰',works:'《功夫》' },{ id: '002', title: '周杰伦' ,works:'《一路向北》'},{ id: '003', title: '沈月',works:'《致我们单纯的小美好》' },],};
},
方法1:跳转路由并携带query参数,to的字符串写法
-
注意:双引号里面的是反引号。
-
${xxx}
:模板字符串 -
补充:什么是URL参数?
URL 参数是追加到 URL 上的一个名称/值对。参数以问号 (?) 开始并采用 name=value 的格式。如果存在多个 URL 参数,则参数之间用一个 (&) 符隔开。有时还会有 #
<li v-for="s in starList" :key="s.id"><!-- 跳转路由并携带query参数,to的字符串写法 --><router-link :to="`/home/stars/detail?title=${s.title}&works=${s.works}`">{{ s.title }}</router-link>
</li>
方法2:跳转路由并携带query参数,to的对象写法
<!-- 跳转路由并携带query参数,to的对象写法 -->
<router-link :to="{path:'/home/stars/detail',query:{title:s.title,works:s.works}
}">{{ s.title }}
</router-link>
- 我们如何能确认传递成功了呢?【我们去路径1下的组件Detail中的生命周期钩子mounted中的打印一下
this.$route
】
Detail.vue
mounted() {console.log(this.$route);
},
this.$route
打印结果如下:
所以,我们在组件Detail中接收数据的方式如下:
<template><div><li>明星:{{ $route.query.title }}</li><li>代表作:{{ $route.query.works}}</li></div>
</template>
案例结果展示:
总结:路由的query参数
-
传递参数
<!-- 跳转并携带query参数,to的字符串写法 --> <router-link :to="/home/message/detail?id=666&title=你好">跳转</router-link><!-- 跳转并携带query参数,to的对象写法 --> <router-link :to="{path:'/home/message/detail',query:{id:666,title:'你好'}}" >跳转</router-link>
-
接收参数:
$route.query.id $route.query.title