1、通过$route.params来获取路径参数
<h2>接收到 你传递过来的值:{{$route.params.username}} --- {{$route.params.post_id}}</h2>
mounted(){
// 从路由信息对象$route 中读取数据 -- 在脚本里写时 要带this
console.log(this.$route.params);
this.pid = this.$route.params.post_id;
this.uname = this.$route.params.username;
}
2、通过props来接收参数
注意:props在路由配置规则中 props:true 使用方法,如下所示:
<div id="app">
<!-- 访问组件 -->
<router-link to="/login">登录</router-link>
<!-- <router-link to="/user/520">用户中心</router-link> -->
<router-link to="/user/小李子是蠢猪/520">用户中心</router-link>
<router-view></router-view>
</div>
<template id="login">
<div>
<h1>我是login组件</h1>
</div>
</template>
<template id="user">
<div>
<h1>我是user组件</h1>
<h2>获取到的编号:{{id}}</h2>
<h2>获取到的用户名是:{{username}}</h2>
</div>
</template>
<script src="./js/vue.js"></script>
<script src="./js/vue-router .js"></script>
<script>
// 组件
var login = {
template:'#login'
};
var user = {
template:'#user',
props:['id','username'],
data(){
return {
// uid:'',
// uname:''
}
},
mounted(){
// 从路由信息对象$route 中读取数据 -- 在脚本里写时 要带this
console.log(this.$route);
}
}
// 创建路由实例对象
var myRouter = new VueRouter({
mode:'history', //模式
// 配置路由规则
routes:[
{
path:'/login',
component:login
},
{
// vue-router中 动态路由如何设置?
// 动态传参 语法:
// 通过 /:参数名 的形式传递参数
path:'/user/:username/:id',
component:user,
// 在路由配置中 添加props属性 给其设置true
props:true
}
]
})
// 根组件
var a = new Vue({
// 模板选择器
el:'#app',
// 挂载路由
router:myRouter,
// 数据中心
data(){
return {
}
},
// 方法中心
methods:{
}
})
</script>
预览效果:
3、我们可以将props设置为对象,那么就直接将对象的数据传递给组件进行使用
注意:props在路由配置规则中 props:(route)=>({}) 使用方法,如下所示:
<title>props另外一种用法</title>
</head>
<body>
<div id="app">
<!-- 访问组件 -->
<router-link to="/login">登录</router-link>
<router-link to="/user">用户中心</router-link>
<router-view></router-view>
</div>
<template id="login">
<div>
<h1>我是login组件</h1>
</div>
</template>
<template id="user">
<div>
<h1>我是user组件</h1>
<h2>获取到的昵称: {{nickname}}</h2>
<h2>获取到的用户年龄是: {{age}}</h2>
</div>
</template>
<script src="./js/vue.js"></script>
<script src="./js/vue-router .js"></script>
<script>
// 组件
var login = {
template:'#login'
};
var user = {
template:'#user',
props:['nickname','age'],
data(){
return {
// uid:'',
// uname:''
}
},
mounted(){
// 从路由信息对象$route 中读取数据 -- 在脚本里写时 要带this
// 如果你在路由配置中,直接把参数写在props的箭头函数里
// 这些参数 不会 被存到 路由信息对象$route的 pramas 这个对象中, 此时这个对象是空
console.log(this.$route);
}
}
// 创建路由实例对象
var myRouter = new VueRouter({
mode:'history', //模式
// 配置路由规则
routes:[
{
path:'/login',
component:login
},
{
// vue-router中 动态路由如何设置?
// 动态传参
// 此刻的 动态传参 是写在 props里的 则path里则不用写了
path:'/user',
component:user,
// 在路由配置中 添加props属性 给其设置true
// props 设置为箭头函数 在箭头函数里 写一个对象 在当前对象里 写 若干个属性
props:(route)=>({
nickname:'小李子憨憨',
age:66
})
}
]
})
// 根组件
var a = new Vue({
// 模板选择器
el:'#app',
// 挂载路由
router:myRouter,
// 数据中心
data(){
return {
}
},
// 方法中心
methods:{
}
})
</script>
预览效果:
4、如果想要获取传递的参数值 还想要 获取传递的对象数据,那么props应该设置为函数形式
<div id="app">
<!-- 访问组件 -->
<router-link to="/login">登录</router-link>
<router-link to="/user/555">用户中心</router-link>
<router-view></router-view>
</div>
<template id="login">
<div>
<h1>我是login组件</h1>
</div>
</template>
<template id="user">
<div>
<h1>我是user组件</h1>
<h2>获取到的昵称: {{nickname}}</h2>
<h2>获取到的用户年龄是: {{age}}</h2>
<h2>获取到的编号是: {{uid}}</h2>
</div>
</template>
<script src="./js/vue.js"></script>
<script src="./js/vue-router .js"></script>
<script>
// 组件
var login = {
template:'#login'
};
var user = {
template:'#user',
props:['nickname','age','uid'], // 这里的参数 要与下面的 props对象里的一致
data(){
return {
// uid:'',
// uname:''
}
},
mounted(){
// 从路由信息对象$route 中读取数据 -- 在脚本里写时 要带this
// 如果你在路由配置中,直接把参数写在props的箭头函数里
// 这些参数 不会 被存到 路由信息对象$route的 pramas 这个对象中, 此时这个对象是空
console.log(this.$route);
}
}
// 创建路由实例对象
var myRouter = new VueRouter({
mode:'history', //模式
// 配置路由规则
routes:[
{
path:'/login',
component:login
},
{
// vue-router中 动态路由如何设置?
// 动态传参
// 此刻的 动态传参 是写在 props里的 则path里则不用写了
// 同时 把参数 也写在 路径path上
path:'/user/:id',
component:user,
// 在路由配置中 添加props属性 给其设置true
// props 设置为箭头函数 在箭头函数里 写一个对象 在当前对象里 写 若干个属性
props:(route)=>({
nickname:'小李子憨憨',
age:66,
uid:route.params.id
})
}
]
})
// 根组件
var a = new Vue({
// 模板选择器
el:'#app',
// 挂载路由
router:myRouter,
// 数据中心
data(){
return {
}
},
// 方法中心
methods:{
}
})
</script>
预览效果: