路由的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
案例
- main.js
import Vue from 'vue'
import App from './App.vue'
// 引入VueRouter
import VueRouter from 'vue-router'
// 引入路由器
import router from './router'
Vue.config.productionTip = false
// 应用插件
Vue.use(VueRouter)
new Vue({
render: h => h(App),
router: router
}).$mount('#app')
- App.vue
<template>
<div>
<div class="row">
<Banner />
</div>
<div class="row">
<div class="col-xs-offset-2 col-xs-2">
<div class="list-group">
<router-link
to="./about"
class="list-group-item"
active-class="active"
>About</router-link
>
<router-link to="./home" class="list-group-item" active-class="active"
>Home</router-link
>
</div>
</div>
<div class="col-xs-6">
<div class="panel">
<div class="panel-body">
<router-view></router-view>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import Banner from "./components/Banner";
export default {
name: "App",
components: { Banner },
};
</script>
- router文件夹
index.js
// 该文件用于创建整个应用的路由器
// 引入VueRouter
import VueRouter from 'vue-router'
// 引入组件
import About from '../pages/About'
import Home from '../pages/Home'
import News from '../pages/News'
import Message from '../pages/Message'
import Detail from '../pages/Detail'
// 创建并暴露一个路由器
export default new VueRouter({
routes: [
{
path: '/about',
component: About
},
{
path: '/home',
component: Home,
children: [
{
path: 'news',
component: News,
},
{
path: 'message',
component: Message,
children: [
{
path: 'detail',
component: Detail,
}
]
}
]
},
]
})
-
pages文件夹
- About.vue
<template> <div> <h2>我是About的内容</h2> </div> </template> <script> export default { name: "About", }; </script>
- Home.vue
<template> <div> <h2>我是Home的内容</h2> <div> <h2>Home组件内容</h2> <div> <ul class="nav nav-tabs"> <li> <router-link to="/home/news" class="list-group-item" active-class="active" > News </router-link> </li> <li> <router-link to="/home/message" class="list-group-item" active-class="active" > Message </router-link> </li> </ul> <router-view></router-view> </div> </div> </div> </template> <script> export default { name: "Home", }; </script>
- Message.vue
<template> <div> <ul> <li v-for="m in MessageList" :key="m.id"> <!-- 跳转路由并携带query参数,to的字符串写法 --> <!-- <router-link :to="`/home/message/detail?id=${m.id}&title=${m.title}`">{{ m.title }}</router-link> --> <!-- 跳转路由并携带query参数,to的对象写法 --> <router-link :to="{ path: '/home/message/detail', query: { id: m.id, title: m.title, }, }" > {{ m.title }} </router-link> </li> </ul> <router-view></router-view> </div> </template> <script> export default { name: "Message", data() { return { MessageList: [ { id: "001", title: "消息001" }, { id: "002", title: "消息002" }, { id: "003", title: "消息003" }, ], }; }, }; </script>
- News.vue
<template> <ul> <li>news001</li> <li>news002</li> <li>news003</li> </ul> </template> <script> export default { name: "News", }; </script>
- Detail.vue
<template> <ul> <li>消息编号:{{ $route.query.id }}</li> <li>消息标题:{{ $route.query.title }}</li> </ul> </template> <script> export default { name: "Detail", }; </script>
-
components文件夹
Bannet.vue<template> <div> <div class="col-xs-offset-2 col-xs-8"> <div class="page-header"> <h2>Vue Router Demo</h2> </div> </div> </div> </template> <script> export default { name: "Banner", }; </script>
命名路由
作用:
可以简化路由的跳转
如何使用
-
给路由命名
{ path :' /demo' component:Demo , children:[ { path:'test', component:Test, children:[ { name:'hello', //给路由命名 path:'welcome', component :Hel1o } ] } ] }
-
简化跳转
<!--简化前,需要写完整的路径 --> <router-link to="/demo/test/welcome">跳转</router-link> <!--简化后,直接通过名字跳转 --> <router-link :to="{name:' hello'}">跳转</router-link> <!--简化写法配合传递参数--> <router-link :to="{ name: ' hello', query:{ id:666, title:'你好' } }" >跳转</router-link>
路由的params参数
-
配置路由,声明接收params参数
{ path:' /home', component:Home, children:[ { path:'news', component:News, }, { path:'message', component:Message, children:[ { name:'xiangqing', path:'detail/:id/:title’,//使用占位符声明接收params参数 component:Detail } ] } ] }
-
传递参数
<!-- 跳转并携带params参数,to的字符串写法 --> <router-link :to="/home/message/detail/666/你好”跳转</router-link> <!-- 跳转并携带params参数,to的对象写法 --> <router-link :to="{ name: 'xiangqing', params:{ id:666, title:'你好' } }" >跳转</router-link>
注: 路由携带params参数时,若使用to的对象写法,则不能使用path配置项,必须使用name配置!
-
接收参数:
$route.params.id$route.params.title
案例:
- main.js
import Vue from 'vue'
import App from './App.vue'
// 引入VueRouter
import VueRouter from 'vue-router'
// 引入路由器
import router from './router'
Vue.config.productionTip = false
// 应用插件
Vue.use(VueRouter)
new Vue({
render: h => h(App),
router: router
}).$mount('#app')
- App.vue
<template>
<div>
<div class="row">
<Banner />
</div>
<div class="row">
<div class="col-xs-offset-2 col-xs-2">
<div class="list-group">
<router-link
to="./about"
class="list-group-item"
active-class="active"
>About</router-link
>
<router-link to="./home" class="list-group-item" active-class="active"
>Home</router-link
>
</div>
</div>
<div class="col-xs-6">
<div class="panel">
<div class="panel-body">
<router-view></router-view>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import Banner from "./components/Banner";
export default {
name: "App",
components: { Banner },
};
</script>
- router文件夹
index.js
// 该文件用于创建整个应用的路由器
// 引入VueRouter
import VueRouter from 'vue-router'
// 引入组件
import About from '../pages/About'
import Home from '../pages/Home'
import News from '../pages/News'
import Message from '../pages/Message'
import Detail from '../pages/Detail'
// 创建并暴露一个路由器
export default new VueRouter({
routes: [
{
path: '/about',
component: About
},
{
path: '/home',
component: Home,
children: [
{
path: 'news',
component: News,
},
{
path: 'message',
component: Message,
children: [
{
name: 'xq',
path: 'detail/:id/:title',
component: Detail,
}
]
}
]
},
]
})
-
pages文件夹
- About.vue
<template> <div> <h2>我是About的内容</h2> </div> </template> <script> export default { name: "About", }; </script>
- Home.vue
<template> <div> <h2>我是Home的内容</h2> <div> <h2>Home组件内容</h2> <div> <ul class="nav nav-tabs"> <li> <router-link to="/home/news" class="list-group-item" active-class="active" > News </router-link> </li> <li> <router-link to="/home/message" class="list-group-item" active-class="active" > Message </router-link> </li> </ul> <router-view></router-view> </div> </div> </div> </template> <script> export default { name: "Home", }; </script>
- Message.vue
<template> <div> <ul> <li v-for="m in MessageList" :key="m.id"> <!-- 跳转路由并携带params参数,to的字符串写法 --> <!-- <router-link :to="`/home/message/detail/id=${m.id}/$title=${m.title}`">{{ m.title }}</router-link> --> <!-- 跳转路由并携带params参数,to的对象写法 --> <router-link :to="{ name: 'xq', params: { id: m.id, title: m.title, }, }" >{{ m.title }}</router-link> </li> </ul> <router-view></router-view> </div> </template> <script> export default { name: "Message", data() { return { MessageList: [ { id: "001", title: "消息001" }, { id: "002", title: "消息002" }, { id: "003", title: "消息003" }, ], }; }, }; </script>
- News.vue
<template> <ul> <li>news001</li> <li>news002</li> <li>news003</li> </ul> </template> <script> export default { name: "News", }; </script>
- Detail.vue
<template> <ul> <li>消息编号:{{ $route.query.id }}</li> <li>消息标题:{{ $route.query.title }}</li> </ul> </template> <script> export default { name: "Detail", }; </script>
-
components文件夹
Bannet.vue<template> <div> <div class="col-xs-offset-2 col-xs-8"> <div class="page-header"> <h2>Vue Router Demo</h2> </div> </div> </div> </template> <script> export default { name: "Banner", }; </script>
路由的props配置
作用:让路由组件更方便的收到参数
{
name:'xiangqing',
path:'detail/:id',
component:Detail,
// props的第一种写法,值为对象,该对象中所有key-value都会以props的形式传给Detail组件
// props: {a:1}
// props的第二种写法,值为布尔值,若布尔值为真,就会把该组件收到的所有params参数,以props的形式传给Detail组件
// props: true
// props的第三种写法,值为函数
props($route) {
return {
id: $route.query.id, title: $route.query.title
}
}
}
案例:
- main.js
import Vue from 'vue'
import App from './App.vue'
// 引入VueRouter
import VueRouter from 'vue-router'
// 引入路由器
import router from './router'
Vue.config.productionTip = false
// 应用插件
Vue.use(VueRouter)
new Vue({
render: h => h(App),
router: router
}).$mount('#app')
- App.vue
<template>
<div>
<div class="row">
<Banner />
</div>
<div class="row">
<div class="col-xs-offset-2 col-xs-2">
<div class="list-group">
<router-link
to="./about"
class="list-group-item"
active-class="active"
>About</router-link
>
<router-link to="./home" class="list-group-item" active-class="active"
>Home</router-link
>
</div>
</div>
<div class="col-xs-6">
<div class="panel">
<div class="panel-body">
<router-view></router-view>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import Banner from "./components/Banner";
export default {
name: "App",
components: { Banner },
};
</script>
- router文件夹
index.js
// 该文件用于创建整个应用的路由器
// 引入VueRouter
import VueRouter from 'vue-router'
// 引入组件
import About from '../pages/About'
import Home from '../pages/Home'
import News from '../pages/News'
import Message from '../pages/Message'
import Detail from '../pages/Detail'
// 创建并暴露一个路由器
export default new VueRouter({
routes: [
{
path: '/about',
component: About
},
{
path: '/home',
component: Home,
children: [
{
path: 'news',
component: News,
},
{
path: 'message',
component: Message,
children: [
{
name: 'xq',
path: 'detail/:id/:title',
component: Detail,
// props的第一种写法,值为对象,该对象中所有key-value都会以props的形式传给Detail组件
// props: {a:1}
// props的第二种写法,值为布尔值,若布尔值为真,就会把该组件收到的所有params参数,以props的形式传给Detail组件
// props: true
// props的第三种写法,值为函数
props($route) {
return {
id: $route.query.id, title: $route.query.title
}
}
}
]
}
]
},
]
})
-
pages文件夹
- About.vue
<template> <div> <h2>我是About的内容</h2> </div> </template> <script> export default { name: "About", }; </script>
- Home.vue
<template> <div> <h2>我是Home的内容</h2> <div> <h2>Home组件内容</h2> <div> <ul class="nav nav-tabs"> <li> <router-link to="/home/news" class="list-group-item" active-class="active" > News </router-link> </li> <li> <router-link to="/home/message" class="list-group-item" active-class="active" > Message </router-link> </li> </ul> <router-view></router-view> </div> </div> </div> </template> <script> export default { name: "Home", }; </script>
- Message.vue
<template> <div> <ul> <li v-for="m in MessageList" :key="m.id"> <!-- 跳转路由并携带params参数,to的字符串写法 --> <!-- <router-link :to="`/home/message/detail/id=${m.id}/$title=${m.title}`">{{ m.title }}</router-link> --> <!-- 跳转路由并携带params参数,to的对象写法 --> <router-link :to="{ name: 'xq', query: { id: m.id, title: m.title, }, }" >{{ m.title }}</router-link> </li> </ul> <router-view></router-view> </div> </template> <script> export default { name: "Message", data() { return { MessageList: [ { id: "001", title: "消息001" }, { id: "002", title: "消息002" }, { id: "003", title: "消息003" }, ], }; }, }; </script>
- News.vue
<template> <ul> <li>news001</li> <li>news002</li> <li>news003</li> </ul> </template> <script> export default { name: "News", }; </script>
- Detail.vue
<template> <ul> <li>消息编号:{{ id }}</li> <li>消息标题:{{ title }}</li> </ul> </template> <script> export default { name: "Detail", props: ["id", "title"], }; </script>
-
components文件夹
Bannet.vue<template> <div> <div class="col-xs-offset-2 col-xs-8"> <div class="page-header"> <h2>Vue Router Demo</h2> </div> </div> </div> </template> <script> export default { name: "Banner", }; </script>