vue-router-参数

一、概要

vue-router传递参数分为两大类

  • 编程式 router.push
  • 声明式<router-link>

声明式传递参数的方式有三种:

  • 通过<router-link> 标签中的to传参
  • 用url传参
  • 用name传值(不推荐)

二、标签中to传参

语法格式

<!-- get请求参数 -->
<router-link :to="{name:'路由中的名字',query:{参数:值,参数:值}}"></router-link>
<!-- post请求参数 -->
<router-link :to="{name:'路由中的名字',params:{参数:值,参数:值}}"></router-link>

说明

  • :to 表示绑定参数,对象形式
  • name:就是在路由文件中的name值
  • params:就是我们要传的参数,对象形式,在对象里可以传递多个值

栗子

router/index.js

export  default  new VueRouter({
    mode: "history",
    base: process.env.BASE_URL,
    routes: [
        {
            path: "/",
            name: "home",
            component: Home,
            children: [
                {
                    path: "to",
                    name: "toParams",
                    component: RouterToParams
                }
            ]
        },

    ]
});

Home.vue

<template>
    <div class="home">
        <router-link :to="{name:'toParams',params:{uid:10,page:1}}">to传递参数</router-link>
        |
        <router-link to="/params">通过url传递参数</router-link>
        <router-view></router-view>
    </div>
</template>
<script>
    export default {
        name: "home",
    };
</script>

RouterToParams.vue

<template>
    <div>
        uid: <p v-text="$route.params.uid"></p>
        page: <p v-text="$route.params.page"></p>
    </div>
</template>
<script>
    export default {
        name: "RouterToParams"
    }
</script>

三、url传参

语法格式

path: "/:参数?/:参数?"

说明

  • 在路由文件里采用冒号的形式传参,就是对参数的绑定
  • ?表示可选参数

栗子

router/index.js

export default new VueRouter({
    mode: "history",
    base: process.env.BASE_URL,
    routes: [
        {
            path: "/",
            name: "home",
            component: Home,
            children: [
                {
                    path: "params/:page/:size/",
                    name: "url",
                    component: RouterUrlParams
                }
            ]
        },

    ]
});

Home.vue

<template>
    <div class="home">
        <router-link :to="{name:'toParams',params:{uid:10,page:1}}">to传递参数</router-link>
        |
        <router-link :to="'/params/' +  params.page + '/' + params.size">通过url传递参数</router-link>
        <router-view></router-view>
    </div>
</template>
<script>
    export default {
        name: "home",
        data() {
            return {
                params: {
                    page: 1,
                    size: 10,
                }
            }
        }
    };
</script>

RouterUrlParams.vue

<template>
    <div>
        <p v-text="page"></p>
        <p v-text="size"></p>
    </div>
</template>

<script>
    export default {
        name: "RouterUrlParams",
        data() {
            return {
                page: this.$route.params.page,
                size: this.$route.params.size,
            }
        }
    }
</script>

补充说明

有些时候我们希望传递参数先做一些限制,这时候我们就需要在传递时有个基本的类型判断,vue支持正则表达式,例如在路由中

path:'/:参数(正则)/'
例如:
path:'/:uid(\\d+)'

四、声明式编程

1、说明

主要通过涉及到两个类

  • **$router : **路由操作对象,只写对象
  • $route : 路由信息对象,只读对象

2、编程式的导航 router.push

编程式导航传递参数有两种类型:

  • 字符串

    字符串的方式是直接将路由地址以字符串的方式来跳转,这种方式很简单但是不能传递参数

  • 对象

    想要传递参数主要就是以对象的方式来写,分为两种方式:命名路由查询参数,

3、命名路由

命名路由的前提就是在注册路由的地方设置name属性

export default new VueRouter({
    routes: [
        {
            path: "/pro",
            name: "pro",
            component: ProgramRouter
        }
    ]
});

使用方法

<template>
  <div id="app">
      <button @click="toPro">编程式路由导航</button>
      <router-view/>
  </div>
</template>
<script>
  export default {
    methods: {
      toPro: function () {
        this.$router.push({
          name: 'pro',
          // 或者使用
          path: '/pro'
        })
      }
    }
  }
</script>

4、传递参数

query传递参数

query可以使用name传参,也可以使用path

router/index.js

export default new VueRouter({
    routes: [
        {
            path: "/query",
            name: "query",
            component: ProgramRouter
        },
    ]
});

父组件

<template>
    <div id="app">
        <div id="nav">
            <button @click="toQuery">编程式传递参数</button>
        </div>
        <div id="content">
            <router-view/>
        </div>
    </div>
</template>
<script>
    export default {
        methods: {
            toQuery: function () {
                this.$router.push({
                    name: 'query',
                    query: {
                        page: 1,
                        size: 10
                    }
                })
            }
        }
    }
</script>

获取参数

$route.query.page
$route.query.size

params传递参数

query可以使用name传参,不可以使用path

router/index.js

export default new VueRouter({
    routes: [
        {
            name: "query",
            component: ProgramRouter
        },
    ]
});

父组件

<template>
    <div id="app">
        <div id="nav">
            <button @click="toParams">编程式传递参数</button>
        </div>
        <div id="content">
            <router-view/>
        </div>
    </div>
</template>
<script>
    export default {
        methods: {
            toQuery: function () {
                this.$router.push({
                    name: 'params',
                    params: {
                        page: 1,
                        size: 10
                    }
                })
            }
        }
    }
</script>

获取参数

$route.params.page
$route.params.size
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。