vue-router 使用 name 传递参数

本文介绍了vue-router如何使用name属性传递参数。当组件包含子路由时,父组件的name属性不会生效,而是子路由的name属性生效。通常,name属性用于标识路由,并通过params属性传递参数。在路由配置中定义name属性后,可以在模板中绑定params来实现参数传递,这些参数可以在目标组件中通过$router.params获取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

vue-router 使用 name 传递参数

在 vue-router 中,有一个特殊的属性,为 name:

        {
            path: '/',
            name: 'Hello',
            component: Hello,
        },

这里的 name 属性可以用过来传递参数,我们来看这样的一个例子:

首先是 Hi 组件:

<template>
    <div>
        <h2>Hi!</h2>
        <h3>{{ msg }}</h3>
        <router-view></router-view>
    </div>
</template>

<script>
export default {
    name: 'hi',
    data() {
        return {
            msg: 'Hi Page',
        }
    }
}
</script>

然后是 Hi1 和 Hi2 组件:

<template>
    <div>
        <h2>Hi!</h2>
        <h3>{{ msg }}</h3>
    </div>
</template>

<script>
export default {
    name: 'hi1',
    data() {
        return {
            msg: 'Hi1 Page',
        }
    }
}
</script>
<template>
    <div>
        <h2>Hi!</h2>
        <h3>{{ msg }}</h3>
    </div>
</template>

<script>
export default {
    name: 'hi2',
    data() {
        return {
            msg: 'Hi2 Page',
        }
    }
}
</script>

接下来是 router.js 组件

import Vue from 'vue';
import Router from 'vue-router';
import Hello from '@/components/HelloWorld';
import Hi from '@/components/Hi';
import Hi1 from '@/components/Hi1';
import Hi2 from '@/components/Hi2';

Vue.use(Router);

export default new Router({
    routes: [
        {
            path: '/',
            name: 'Hello',
            component: Hello,
        },
        {
            path: '/hi',
            component: Hi,
            children: [
                {
                    path: '/',
                    name: 'Hello/Hi',
                    component: Hi,
                },
                {
                    path: 'hi1',
                    name: 'Hello/Hi/hi1',
                    component: Hi1,
                },
                {
                    path: 'hi2',
                    name: 'Hello/Hi/hi2',
                    component: Hi2,
                }
            ]
        }
    ]
})

然后在 App 组件中,引入:

<template>
  <div id="app">
    <img alt="Vue logo" src="./assets/logo.png">
    <p><router-link to="/">首页</router-link></p>
    <p>
      <router-link to="/hi">Hi 首页</router-link>
    </p>
    <p>
      <router-link to="/hi/hi1">Hi1 页面</router-link>
    </p>
    <p>
      <router-link to="/hi/hi2">Hi2 页面</router-link>
    </p>
    <p>
      {{ $route.name }}
    </p>
    <router-view></router-view>
  </div>
</template>

<script>
export default {
  name: 'App',
}
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

这里需要注意的是,如果的你的组件中包含子路由(也就是嵌套路由),那么该组件的 name 属性将不会生效,而是子路由的 name 属性生效。

上面的 <p>{{ $route.name }}</p> 会读取到 router.js 文件中路由信息的 name 属性。$route 当你注册了 vue-router 组件时,新增的API,可以获取路由的信息。

以下是结果:

在这里插入图片描述
但是不怎常用。


我们常使用的是将 name 属性作为标识,与 router 信息绑定并可以通过 params 属性来传递参数

我们修改上面的 Hi1 组件。

<template>
    <div>
        <h2>Hi!</h2>
        <h3>{{ msg }}</h3>
        <p>{{ $route.params.username }}</p>
        <p> {{ $route.params.id }}</p>
    </div>
</template>

<script>
export default {
    name: 'hi1',
    data() {
        return {
            msg: 'Hi1 Page',
        }
    }
}
</script>

修改 router.js 文件:

import Vue from 'vue';
import Router from 'vue-router';
import Hello from '@/components/HelloWorld';
import Hi from '@/components/Hi';
import Hi1 from '@/components/Hi1';
import Hi2 from '@/components/Hi2';

Vue.use(Router);

export default new Router({
    routes: [
        {
            path: '/',
            name: 'Hello',
            component: Hello,
        },
        {
            path: '/hi',
            component: Hi,
            children: [
                {
                    path: '/',
                    name: 'Hello/Hi',
                    component: Hi,
                },
                {
                    path: 'hi1',
                    name: 'hi1',
                    component: Hi1,
                },
                {
                    path: 'hi2',
                    name: 'hi2',
                    component: Hi2,
                }
            ]
        }
    ]
})

然后,在 App.vue 组件中进行如下修改:

<template>
  <div id="app">
    <img alt="Vue logo" src="./assets/logo.png">
    <p><router-link to="/">首页</router-link></p>
    <p>
      <router-link to="/hi">Hi 首页</router-link>
    </p>
    <p>
      <router-link :to="{name: 'hi1', params: {username: 'qian', id: 3}}">Hi1 页面</router-link>
    </p>
    <p>
      <router-link :to="{name: 'hi2'}">Hi2 页面</router-link>
    </p>
    <p>
      {{ $route.name }}
    </p>
    <router-view></router-view>
  </div>
</template>

<script>
export default {
  name: 'App',
}
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

我们修改了 <router-link> 标签中 to 属性,将其与后面的对象进行绑定。这里进行绑定之后,就意味着 Hi1 页面的 link 标签与 router 信息中 name 属性值为 ‘hi1’ 的 router 信息绑定,此时,点击会跳转至 /Hi/hi,同时,params 属性中的属性值,将会被传递到对应组件(这里是 Hi1 组件),并可以通过 APi: $router.params 获取。

执行结果如下:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值