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

简介: 组件参数校验与非Props特性1.组件参数校验:父组件向子组件传递内容,子组件可以对这些内容做一些约束,这种约束称为组件参数校验示例:对传入数据 content 进行约束,必须为 string 类型数据 组件参数校验与非Props特性 Vue.

组件参数校验与非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>'

输出:

目录
相关文章
|
3天前
|
JavaScript
vue使用iconfont图标
vue使用iconfont图标
30 1
|
13天前
|
JavaScript 关系型数据库 MySQL
基于VUE的校园二手交易平台系统设计与实现毕业设计论文模板
基于Vue的校园二手交易平台是一款专为校园用户设计的在线交易系统,提供简洁高效、安全可靠的二手商品买卖环境。平台利用Vue框架的响应式数据绑定和组件化特性,实现用户友好的界面,方便商品浏览、发布与管理。该系统采用Node.js、MySQL及B/S架构,确保稳定性和多功能模块设计,涵盖管理员和用户功能模块,促进物品循环使用,降低开销,提升环保意识,助力绿色校园文化建设。
|
2月前
|
JavaScript API 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
2月前
|
JavaScript 前端开发 开发者
Vue是如何劫持响应式对象的
Vue是如何劫持响应式对象的
32 1
|
2月前
|
JavaScript 前端开发 API
介绍一下Vue中的响应式原理
介绍一下Vue中的响应式原理
33 1
|
2月前
|
JavaScript 前端开发 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
2月前
|
存储 JavaScript 前端开发
介绍一下Vue的核心功能
介绍一下Vue的核心功能
|
2月前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱前端的大一学生,专注于JavaScript与Vue,正向全栈进发。博客分享Vue学习心得、命令式与声明式编程对比、列表展示及计数器案例等。关注我,持续更新中!🎉🎉🎉
44 1
vue学习第一章
|
2月前
|
JavaScript 前端开发 索引
vue学习第三章
欢迎来到瑞雨溪的博客,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中的v-bind指令,包括基本使用、动态绑定class及style等,希望能为你的前端学习之路提供帮助。持续关注,更多精彩内容即将呈现!🎉🎉🎉
32 1
|
2月前
|
缓存 JavaScript 前端开发
vue学习第四章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中计算属性的基本与复杂使用、setter/getter、与methods的对比及与侦听器的总结。如果你觉得有用,请关注我,将持续更新更多优质内容!🎉🎉🎉
39 1
vue学习第四章

热门文章

最新文章