Vue-Router query 命名路由 params props

  • 路由的query参数
    1.传递参数
    <!-- 跳转并携带query参数,to的字符串写法 -->
    <router-link :to="`/home/message/detail?id=${m.id}&title=${m.title}`">跳转</router-link>
    				
    <!-- 跳转并携带query参数,to的对象写法(推荐) -->
    <router-link 
    	:to="{
    		path:'/home/message/detail',
    		query:{
    		   id: m.id,
           title: m.title
    		}
    	}"
    >跳转</router-link>
    2.接收参数
    查看代码
    $route.query.id
    $route.query.title



    src/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:'news',
              component:News
            },
            {
              path:'message',
              component:Message,
              children:[
                {
                  path:'detail',
                  component:Detail
                }
              ]
            }
          ]
        }
      ]
    })

    src/pages/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>&nbsp;&nbsp; -->
    
            <!-- 跳转路由并携带query参数,to的对象写法 -->
            <router-link :to="{
                                path:'/home/message/detail',
                                query:{
                                  id:m.id,
                                  title:m.title
                                }
                              }">
              {{m.title}}
          </router-link>&nbsp;&nbsp;
          </li>
        </ul>
        <hr/>
        <router-view></router-view>
      </div>
    </template>
    
    <script>
      export default {
        name:'News',
        data(){
          return{
            messageList:[
              {id:'001',title:'消息001'},
              {id:'002',title:'消息002'},
              {id:'003',title:'消息003'}
            ]
          }
        }
      }
    </script>

    src/pages/detail.vue

    查看代码
    
    <template>
        <ul>
            <li>消息编号:{{ $route.query.id }}</li>
            <li>消息标题:{{ $route.query.title }}</li>
        </ul>
    </template>
    
    <script>
        export default {
            name:'Detail'
        }
    </script>
  • 命名路由
    1.作用:可以简化路由的跳转
    2.使用
      a.给路由命名
     
    查看代码
    {
    	path:'/demo',
    	component:Demo,
    	children:[
    		{
    			path:'test',
    			component:Test,
    			children:[
    				{
              name:'hello' // 给路由命名
    					path:'welcome',
    					component:Hello,
    				}
    			]
    		}
    	]
    }

            b.简化跳转 

查看代码

<!--简化前,需要写完整的路径 -->
<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参数

    1.配置路由,声明接收params参数
    查看代码
    {
    	path:'/home',
    	component:Home,
    	children:[
    		{
    			path:'news',
    			component:News
    		},
    		{
    			component:Message,
    			children:[
    				{
    					name:'xiangqing',
    					path:'detail/:id/:title', // 使用占位符声明接收params参数
    					component:Detail
    				}
    			]
    		}
    	]
    }

       2.传递参数
        注意:路由携带params参数时,若使用to的对象写法,则不能使用path的配置项,必须使用name配置!

查看代码

<!-- 跳转并携带params参数,to的字符串写法 -->
<router-link :to="/home/message/detail/666/你好">跳转</router-link>
				
<!-- 跳转并携带params参数,to的对象写法 -->
<router-link 
	:to="{
		name:'xiangqing',
		params:{
		   id:666,
       title:'你好'
		}
	}"
>跳转</router-link>

3.接收参数

查看代码

$route.params.id
$route.params.title

demo:
    src/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:'news',
                    component:News
                },
                {
                    path:'message',
                    component:Message,
                    children:[
                        {
                            name:'xiangqing',
                            path:'detail/:id/:title',	// 使用占位符声明接收params参数
                            component:Detail
                        }
                    ]
                }
            ]
        }
    ]
})

src/pages/message.vue

查看代码

<template>
    <div>
        <ul>
            <li v-for="m in messageList" :key="m.id">
              
                <!-- 跳转路由并携带params参数,to的字符串写法 -->
                <!-- <router-link :to="`/home/message/detail/${m.id}/${m.title}`">
                    {{m.title}}
                </router-link>&nbsp;&nbsp; -->

                <!-- 跳转路由并携带params参数,to的对象写法 -->
                <router-link :to="{
                    name:'xiangqing',
                    params:{
                        id:m.id,
                        title:m.title
                    }
                }">
                    {{m.title}}
                </router-link>&nbsp;&nbsp;
            </li>
        </ul>
        <hr/>
        <router-view></router-view>
    </div>
</template>

<script>
    export default {
        name:'News',
        data(){
            return{
                messageList:[
                  {id:'001',title:'消息001'},
                  {id:'002',title:'消息002'},
                  {id:'003',title:'消息003'}
                ]
            }
        }
    }
</script>

src/pages/Detail.vue

查看代码

<template>
  <ul>
    <li>消息编号:{{ $route.params.id }}</li>
    <li>消息标题:{{ $route.params.title }}</li>
  </ul>
</template>

<script>
    export default {
        name:'Detail'
    }
</script>
  • 路由的props配置

在路由规则中开启 props 传参,组件可以使用 props 接收路由参数:

查看代码
{
	name:'xiangqing',
	path:'detail',
	component:Detail,

	//第一种写法:props值为对象,该对象中所有的key-value的组合最终都会通过props传给Detail组件
	// props:{a:900}

	//第二种写法:props值为布尔值,为true时,则把路由收到的所有params参数通过props传给Detail组件
	// props:true
	
	//第三种写法:props值为函数,该函数返回的对象中每一组key-value都会通过props传给Detail组件
	props($route){
		return {
			id: $route.query.id,
			title: $route.query.title
		}
	}
}

demo

src/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:'news',
          component:News
        },
        {
          path:'message',
          component:Message,
          children:[
            {
              name:'xiangqing',
              path:'detail/:id/:title',
              component:Detail,
              // props的第一种写法,值为对象,
              // 该对象中的所有key-value都会以props的形式传给Detail组件
              // props:{a:1,b:'hello'}

              // props的第二种写法,值为布尔值,
              // 若布尔值为真,会把该路由组件收到的所有params参数,以props的形式传给Detail组件
              // props:true

              // props的第三种写法,值为函数
              props(params) { // 这里可以使用解构赋值
                return {
                  id: params.id,
                  title: params.title,
                }
              }
            }
          ]
        }
      ]
    }
  ]
})

src/oages/message.vue

查看代码

<template>
  <div>
    <ul>
      <li v-for="item in messageList"
          :key="item.id">

        <!-- <router-link :to="`/home/message/detail?id=${item.id}&title=${item.title}`">{{item.title}}</router-link>&nbsp;&nbsp; -->

        <router-link :to="{
          name:'xiangqing',
          query:{
            id:item.id,
            title:item.title
          }}">{{item.title}}</router-link>&nbsp;&nbsp;

      </li>
    </ul>
    <hr>
    <router-view></router-view>
  </div>
</template>

<script>
export default {
  name: "Message",
  data () {
    return {
      messageList: [
        {
          id: "001",
          title: "第一个标题"
        },
        {
          id: "002",
          title: "第二个标题"
        },
        {
          id: "003",
          title: "第三个标题"
        }
      ]
    }
  }
}
</script>

<style>
</style>

src/pages/Detail.vue

查看代码

<template>
    <ul>
        <li>消息编号:{{ id }}</li>
        <li>消息标题:{{ title }}</li>
    </ul>
</template>

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

 

posted @   8ling1ling  阅读(83)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示