初识 Vue(16)---(组件参数校验与非Props特性)

组件参数校验与非Props特性

1.组件参数校验:

父组件向子组件传递内容,子组件可以对这些内容做一些约束,这种约束称为组件参数校验

示例:对传入数据 content 进行约束,必须为 string 类型数据

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>组件参数校验与非Props特性</title>
	<script src="./vue.js"></script>
</head>
<body>
	<div id="root">
	<child content="hello world"></child>	
	</div>	
	<script>
	Vue.component('child',{
		//对 content 进行约束,必须是字符串String类型
		props:{
			content:String
		},
		template:'<div>{{content}}</div>'
	})

	var vm = new Vue({
		el:'#root'
		
		})
	</script>
</body>
</html>

输出:

当更改输入为数字(Number)类型时

<child :content="123"></child>	

输出:报错([Vue warn]: Invalid prop: type check failed for prop "content". Expected String, got Number.

改变约束条件为输入为 Number 类型,错误消失

props:{
			content:Number
		},

输出:

若想同时满足条件,加入数组即可

props:{
			content:[Number,String]
		},

同样的,使用对象也可以完成上述功能

props:{
			content:{
				type:String
			}
		},

稍微复杂一些的功能

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>组件参数校验与非Props特性</title>
	<script src="./vue.js"></script>
</head>
<body>
	<div id="root">
	<child ></child>	
	</div>	
	<script>
	Vue.component('child',{
		//对 content 进行约束,必须是字符串String类型
		props:{
			content:{
				type:String,
				required:false,  //不传递数据
				default:'default value' //属性content不传递值时的输出内容
			}
		},
		template:'<div>{{content}}</div>'
	})

	var vm = new Vue({
		el:'#root'
		
		})
	</script>
</body>
</html>

输出:

再复杂一点的功能(对输入内容的长度进行约束)

Vue.component('child',{
		//对 content 进行约束,必须是字符串String类型
		props:{
			content:{
				type:String,
				
				validator:function(value){
					return (value.length > 5)
	//对 content 属性通过校验器进行校验,value 是传入的内容,要求传入的内容长度必须 > 5
	
				}
			}
		},
		template:'<div>{{content}}</div>'
	})

当输出为 hello world 时满足条件,不报错

当输出为 hell 时,不满足条件,报错

2.Props特性

当父组件调用子组件,通过属性向子组件传值的时候(传递了 content),如果子组件里写了对父组件内容的接收(在 Props 中声明了 content),父子组件之间有对应关系,这种对应关系就称为 Props特性

Props特性的特点:1.content 在 DOM 结构中不显示

<body>
	<div id="root">
	<child content="hell"></child>	
	</div>	

控制台输出:

特点2:父组件传递 content ,子组件接收 content ,在子组件里可以通过差值表达式的形式来取得 content 中的内容了

将 hell 传给 content ,子组件通过差值表达式来获取到 hell ---Props特性

3.非Props特性

父组件向子组件传递了一个属性,但子组件中并没有 Props 内容,子组件并没有声明要接收父组件传递过来的内容

特点1.如果声明非 Props特性 ,则 content="hell" 为非 Props特性,在子组件中无法获取到 content 内容,故会报错

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>组件参数校验与非Props特性</title>
	<script src="./vue.js"></script>
</head>
<body>
	<div id="root">
	<child content="hell"></child>	
	</div>	
	<script>
	Vue.component('child',{
		
		template:'<div>{{content}}</div>'
	})

	var vm = new Vue({
		el:'#root'
		
		})
	</script>
</body>
</html>

2.特点2:声明非 Props特性,这个属性会展示在子组件最外层的 DOM 标签HTML 属性里面

template:'<div>hello</div>'

输出:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值