<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<!--
如果某个route上写了props: true属性,那么对应的路由组件上就会多出来一个属性
{
path: '/demo/:a',
component: demo,
props: true
}
相当于
<demo v-bind="$route.params"></demo>
又相当于
<demo :id="$route.params.id"></demo>
如果给路由对象上添加props等于true则对应的路由组件里就可以接收props
props: {
params参数: 数据类型
}
如果路由对象上的props是对象,则会按照原样添加给路由组件
{
path: '/',
component: demo,
props: {a: 1, b: 2, c: 3}
}
相当于
<demo v-bind="{a: 1, b: 2, c: 3}"></demo>
又相当于
<demo :a="1" :b="2" :c="3"></demo>
所以可以在demo组件中设置prop接收a b c三个值
1 如果props是true
则将route.params添加到组件上
<com v-bind="route.params"></com>
2 如果props是对象
则将这个对象原样添加到组件上
<com v-bind="props"></com>
3 如过props是函数 (一般返回值为对象)
则将这个函数的返回值添加到组件上
<com v-bind="props返回值"></com>
<com v-bind="{key:value}"></com>
<com :key="value"></com>
最终就可以在组件中设置props用于接收这些属性值
这个不是新的功能,而是为了解耦提出的新的写法
-->
<div id="app">
<router-view></router-view>
</div>
<script src="../vue.js"></script>
<script src="../vue-router.js"></script>
<script>
const com = {
template: `
<div>组件</div>
`,
props: {
id: String,
// a: Number,
// b: Number,
// c: Number,
// query: Object
a: String,
b: String,
c: String,
},
created () {
this.getData()
},
methods: {
getData () {
// console.log(this.$route.params.id)
console.log(this.id)
console.log(this.a, this.b, this.c)
console.log(this.query)
}
}
}
const router = new VueRouter({
routes: [
{
path: '/:id',
component: com,
// props: true
/* props: {
a: 1,
b: 2,
c: 3
} */
props: (route) => {
return route.query
}
}
]
})
const app = new Vue({
el: '#app',
router
})
</script>
</body>
</html>