先正常添加一个user 用户路由及界面
const User = () => import('../views/User.vue')
在home children下添加user的子路由
{
path: 'user', //url
name: 'user', //路由的名字
component: User //渲染组件的名字
}
views/User.vue
<template>
<div>
user用户页面
</div>
</template>
<script>
export default {
}
</script>
<style>
</style>
第一种传参方法:url传参
Home.vue 的router-link配置
<ul>
<li v-for="(item, index) in 5" :key="index">
<router-link :to="'/home/user/'+(index+1)">我是用户{{ index + 1 }}</router-link>
</li>
</ul>
router/index.js文件home children下添加user的子路由
{
path: 'user/:id', //id匹配/user/后面的东西
name: 'user', //路由的名字
component: User //渲染组件的名字
}
views/User.vue
<template>
<div>
<h1>user用户页面</h1>
<p>接受过来的参数是{{ this.$route.params.id }}</p>
</div>
</template>
<script>
export default {
}
</script>
<style>
</style>
效果:
url 已path的方式显示了传参的内容
第二种传参方法:声明式params传参
Home.vue 的router-link配置
to=一个对象,name参数值的是route的path的值,params是一个对象,里面声明了传了一个参数id
<ul>
<li v-for="(item, index) in 5" :key="index">
<router-link :to="{
name: 'user',
params: {
id: '声明传params参数' + (index + 1)
}
}">我是用户{{ index + 1 }}</router-link>
</li>
</ul>
router/index.js文件home children下添加user的子路由
{
path: 'user', //id匹配/user/后面的东西
name: 'user', //路由的名字
component: User //渲染组件的名字
}
views/User.vue
<template>
<div>
<h1>user用户页面</h1>
<p>接受过来的参数是{{ this.$route.params.id }}</p>
</div>
</template>
<script>
export default {
}
</script>
<style>
</style>
效果:
第三种传参方法:声明式query传参
Home.vue 的router-link配置
to=一个对象,name参数值的是route的path的值,params是一个对象,里面声明了传了一个参数id
<ul>
<li v-for="(item, index) in 5" :key="index">
<router-link :to="{
name: 'user',
query: {
id: '声明传query参数' + (index + 1)
}
}">我是用户{{ index + 1 }}</router-link>
</li>
</ul>
这里可以去掉name参数,加上path:/home/user,也是可以的。
<router-link :to="{
path: '/home/user',
query: {
id: '声明传参数' + (index + 1)
}
}">我是用户{{ index + 1 }}</router-link>
router/index.js文件home children下添加user的子路由
{
path: 'user', //id匹配/user/后面的东西
name: 'user', //路由的名字
component: User //渲染组件的名字
}
views/User.vue
<template>
<div>
<h1>user用户页面</h1>
<p>接受过来的参数是{{ this.$route.query.id }}</p>
</div>
</template>
<script>
export default {
}
</script>
<style>
</style>
效果:
另外一种编程式传参数
Home.vue文件内容
li标签绑定了一个函数,tolink,给函数传递参数,tolink函数再使用this.$router.push方法传递函数。
<template>
<div class="home">
<img alt="Vue logo" src="../assets/logo.png">
<!-- <HelloWorld msg="Welcome to Your Vue.js App"/> -->
<div id="nav">
<router-link to="/home">Home</router-link> |
<router-link to="/home/about">About</router-link>|
<router-link to="/home/wk">wk</router-link>
<ul>
<li @click="tolink(index+1)" v-for="(item, index) in 5" :key="index">
我是用户{{ index + 1 }}
</li>
</ul>
</div>
<span>我是home.vue,下面home-view</span>
<router-view></router-view>
</div>
</template>
<script>
// @ is an alias to /src
import HelloWorld from '@/components/HelloWorld.vue'
export default {
name: 'Home',
components: {
HelloWorld
},
methods: {
tolink(id){
this.$router.push({
name:"user",
params:{
id:id
}
})
}
},
data(){
return{
}
}
}
</script>
router/index.js文件home children下添加user的子路由
{
path: 'user', //id匹配/user/后面的东西
name: 'user', //路由的名字
component: User //渲染组件的名字
}
views/User.vue
<template>
<div>
<h1>user用户页面</h1>
<p>接受过来的参数是{{ this.$route.params.id }}</p>
</div>
</template>
<script>
export default {
}
</script>
<style>
</style>
效果:
总结:
query可以和path配对
query可以和name配对
parms不可以和path配对
parms可以只可以与name配对