路由的props参数

使用props参数,可以更方便的给路由组件传递数据。
本篇基于路由的query参数中的完整实例,实现需求:从路由组件Message.vue向路由组件Detail.vue传递数据。

路由规则配置中,props参数的使用有如下三种方式:

  1. props值是一个对象。
  2. props值是一个布尔值。
  3. props值是一个函数。

接下来我们一一来看下这3种方式。

props值是一个对象

在Detail的路由规则中配置props值为一个对象,该对象中的key-value会全部以props的形式传递给Detail组件。

  • 修改router/index.js
import VueRouter from "vue-router";
import Home from "../pages/Home";
import About from "../pages/About";
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:"message",
                    component:Message,
                    children:[
                        {
                            path:"detail",
                            component:Detail,
                            props:{
                                id:"xxx",
                                title:"yyy"
                            }
                        }
                    ]
                },
                {
                    path:"news",
                    component:News
                }
            ]
        }
    ]
})

在这里插入图片描述

  • 修改路由组件Message.vue
<template>
   <div>
       <ul>
           <li v-for="message in messageList" :key="message.id">
               <router-link to="/home/message/detail">
                {{message.title}}
               </router-link>
           </li>
       </ul>
       <hr>
       <router-view></router-view>
   </div>
</template>

<script>
export default {
    name:"Message",
    data(){
        return {
            messageList:[
                {id:"001",title:"消息01"},
                {id:"002",title:"消息02"},
                {id:"003",title:"消息03"},
            ]
        }
    }
}
</script>

<style>

</style>
  • 修改路由组件Detail.vue
    Detail组件通过props接收参数:id和title。
<template>
    <ul>
        <li>消息编号:{{id}}</li>
        <li>消息标题:{{title}}</li>
    </ul>
</template>

<script>
export default {
    name:"Detail",
    props:['id','title']
}
</script>

<style>

</style>

在这里插入图片描述
在这里插入图片描述

props值是一个布尔值

Detail路由规则中配置props值为布尔值true,则Detail组件接收到的所有params参数会以props形式传递给过来。

  • 修改router/index.js
import VueRouter from "vue-router";
import Home from "../pages/Home";
import About from "../pages/About";
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:"message",
                    component:Message,
                    children:[
                        {
                            name:"xiangqing",
                            path:"detail/:id/:title",
                            component:Detail,
                            props:true
                        }
                    ]
                },
                {
                    path:"news",
                    component:News
                }
            ]
        }
    ]
})

在这里插入图片描述

  • 路由组件Message.vue
<template>
   <div>
       <ul>
           <li v-for="message in messageList" :key="message.id">
               <router-link :to="{
                    name:'xiangqing',
                    params:{
                        id:message.id,
                        title:message.title
                    }
                   }">
                {{message.title}}
               </router-link>
           </li>
       </ul>
       <hr>
       <router-view></router-view>
   </div>
</template>

<script>
export default {
    name:"Message",
    data(){
        return {
            messageList:[
                {id:"001",title:"消息01"},
                {id:"002",title:"消息02"},
                {id:"003",title:"消息03"},
            ]
        }
    }
}
</script>

<style>

</style>

在这里插入图片描述

  • 路由组件Detail.vue
<template>
    <ul>
        <li>消息编号:{{id}}</li>
        <li>消息标题:{{title}}</li>
    </ul>
</template>

<script>
export default {
    name:"Detail",
    props:['id','title']
}
</script>

<style>

</style>

在这里插入图片描述

在这里插入图片描述

props值是一个函数

路由规则配置中props值为一个函数,且函数的参数是$route

通过props接收params参数

  • 修改router/index.js
import VueRouter from "vue-router";
import Home from "../pages/Home";
import About from "../pages/About";
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:"message",
                    component:Message,
                    children:[
                        {
                            name:"xiangqing",
                            path:"detail/:id/:title",
                            component:Detail,
                            props($route){
                                return {
                                    id:$route.params.id,
                                    title:$route.params.title
                                }
                            }
                        }
                    ]
                },
                {
                    path:"news",
                    component:News
                }
            ]
        }
    ]
})

在这里插入图片描述

  • 路由组件Message.vue
<template>
   <div>
       <ul>
           <li v-for="message in messageList" :key="message.id">
               <router-link :to="{
                    name:'xiangqing',
                    params:{
                        id:message.id,
                        title:message.title
                    }
                   }">
                {{message.title}}
               </router-link>
           </li>
       </ul>
       <hr>
       <router-view></router-view>
   </div>
</template>

<script>
export default {
    name:"Message",
    data(){
        return {
            messageList:[
                {id:"001",title:"消息01"},
                {id:"002",title:"消息02"},
                {id:"003",title:"消息03"},
            ]
        }
    }
}
</script>

<style>

</style>

在这里插入图片描述

  • 路由组件Detail.vue
<template>
    <ul>
        <li>消息编号:{{id}}</li>
        <li>消息标题:{{title}}</li>
    </ul>
</template>

<script>
export default {
    name:"Detail",
    props:['id','title']
}
</script>

<style>

</style>

在这里插入图片描述

在这里插入图片描述

通过props接收query参数

  • 修改router/index.js
import VueRouter from "vue-router";
import Home from "../pages/Home";
import About from "../pages/About";
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:"message",
                    component:Message,
                    children:[
                        {
                            path:"detail",
                            component:Detail,
                            props($route){
                                return {
                                    id:$route.query.id,
                                    title:$route.query.title
                                }
                            }
                        }
                    ]
                },
                {
                    path:"news",
                    component:News
                }
            ]
        }
    ]
})

在这里插入图片描述

  • 路由组件Message.vue
<template>
   <div>
       <ul>
           <li v-for="message in messageList" :key="message.id">
               <router-link :to="{
                    path:'/home/message/detail',
                    query:{
                        id:message.id,
                        title:message.title
                    }
                   }">
                {{message.title}}
               </router-link>
           </li>
       </ul>
       <hr>
       <router-view></router-view>
   </div>
</template>

<script>
export default {
    name:"Message",
    data(){
        return {
            messageList:[
                {id:"001",title:"消息01"},
                {id:"002",title:"消息02"},
                {id:"003",title:"消息03"},
            ]
        }
    }
}
</script>

<style>

</style>

在这里插入图片描述

  • 路由组件Detail.vue
<template>
    <ul>
        <li>消息编号:{{id}}</li>
        <li>消息标题:{{title}}</li>
    </ul>
</template>

<script>
export default {
    name:"Detail",
    props:['id','title']
}
</script>

<style>

</style>

在这里插入图片描述
在这里插入图片描述

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值