父组件是通过属性绑定的方式向子组件传值的,子组件有权对父组件传来的参数进行一些约束,我们就称这为组件参数校验。
比如我们希望约束父组件传递来的数据都是字符串型的:
<body>
<div id="root">
<child content="Hello World"></child>
</div>
<script>
//定义一个全局组件
Vue.component('child',{
props:{
content: String
},
template:'<div>{{content}}</div>'
})
var vm=new Vue({
el:'#root'
})
</script>
</body>
数字型的:
<body>
<div id="root">
<child :content="123"></child>
</div>
<script>
//定义一个全局组件
Vue.component('child',{
props:{
content: Number
},
template:'<div>{{content}}</div>'
})
var vm=new Vue({
el:'#root'
})
</script>
</body>
是字符串,或者是数字类型:
<body>
<div id="root">
<child :content="123"></child>
</div>
<script>
//定义一个全局组件
Vue.component('child',{
props:{
content:[String,Number]
},
template:'<div>{{content}}</div>'
})
var vm=new Vue({
el:'#root'
})
</script>
</body>
当然也可以要求其它类型,如对象等。除了类型type,还有其它属性可以使用,还可以写自定义校验:
<body>
<div id="root">
<child content="Hello World"></child>
</div>
<script>
//定义一个全局组件
Vue.component('child',{
props:{
content:{
type:String, //类型
required:false, //是否必传
default:'default value', //默认值
validator:function(value){ //自定义校验,校验参数的长度是否大于五,大于返回true,小于 返回false
return (value.length>5)
}
}
},
template:'<div>{{content}}</div>'
})
var vm=new Vue({
el:'#root'
})
</script>
</body>
而非props特性是指父组件声明了属性而子组件没有用props去接收它,从而父组件的dom结构显示出了声明的属性的内容。