组件参数校验
-
当父组件向子组件传值的时候,子组件可以检验参数的类型,默认值,是否必须传值等。
-
效果
-
代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<html lang="en">
<head>
<meta charset="UTF-8">
<title>组件参数校验与非props特性</title>
<script src="http://vuejs.org/js/vue.js"></script>
</head>
<body>
<div id="root">
<child content="Hello World"></child>
<child :content="123"></child>
</div>
<script>
Vue.component('child', {
props: {
content: [Number, String] //这里规定了传值的数据类型是数字或者字符串
},
})
var vm = new Vue({
el: '#root'
})
</script>
</body>
</html> -
假设现在我要传入一个对象。那么父组件必须要加入
v-bind
,不然传入的都是字符串。例如:1
<child content="{'a':1}"></child>
-
那么子组件的
content
肯定也要改成Object。我们除了用数组的写法,也可以用对象的写法校验content
,例如:1
2
3
4
5content: {
type: Object,
required: false, //当值为true的时候表示必须传入参数
default: 'default value' //当没有传入参数,content的默认值就是default的内容
} -
第二种写法其实更好,推荐使用。如果用来传入字符串,也可以用第二种写法
例如:http://js.jirengu.com/monab/1/edit -
除了以上校验方法,我们也可以通过
validator
自定义校验- 效果
- 代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<html lang="en">
<head>
<meta charset="UTF-8">
<title>组件参数校验与非props特性</title>
<script src="http://vuejs.org/js/vue.js"></script>
</head>
<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) {
return value.length > 5
}//规定出入的参数长度必须大于5
}
},
})
var vm = new Vue({
el: '#root'
})
</script>
</body>
</html>
非props特性
Prop
是你可以在组件上注册的一些自定义特性。当一个值传递给一个prop
特性的时候,它就变成了那个组件实例的一个属性。- 一个非
prop
特性是指传向一个组件,但是该组件并没有相应prop
定义的特性。父组件传递的prop
会显示在子组件最外层的template
中。 - 效果 :
- 代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<html lang="en">
<head>
<meta charset="UTF-8">
<title>组件参数校验与非props特性</title>
<script src="http://vuejs.org/js/vue.js"></script>
</head>
<body>
<div id="root">
<child content="Hello World"></child>
</div>
<script>
Vue.component('child', {
})
var vm = new Vue({
el: '#root'
})
</script>
</body>
</html>