初识 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>'

输出:

目录
相关文章
|
1天前
|
JavaScript 前端开发 UED
Vue工具和生态系统: Vue.js和服务器端渲染(SSR)有关系吗?请解释。
Vue.js是一个渐进式JavaScript框架,常用于开发单页面应用,但其首屏加载较慢影响用户体验和SEO。为解决此问题,Vue.js支持服务器端渲染(SSR),在服务器预生成HTML,加快首屏速度。Vue.js的SSR可手动实现或借助如Nuxt.js的第三方库简化流程。Nuxt.js是基于Vue.js的服务器端渲染框架,整合核心库并提供额外功能,帮助构建高效的应用,改善用户体验。
4 0
|
2天前
|
Web App开发 JavaScript 开发者
Vue工具和生态系统:什么是Vue DevTools?如何使用它?
Vue Devtools是Vue.js官方的浏览器扩展,用于简化应用调试和优化。可在Chrome和Firefox等浏览器上安装,集成到开发者工具中。安装步骤包括下载源码、npm安装、修改manifest.json并加载编译后的扩展。启用后,开发者能查看Vue组件树,检查属性,并在允许的情况下编辑data,提升开发效率。
5 0
|
3天前
|
JavaScript 测试技术
vue不同环境打包环境变量处理
vue不同环境打包环境变量处理
13 0
|
3天前
|
JavaScript
Vue Steps步骤组件用法
Vue Steps步骤组件用法
11 0
|
3天前
|
JavaScript
Vue项目使用bpmn预览流程图
Vue项目使用bpmn预览流程图
8 0
|
3天前
|
JavaScript
vue中高精度小数问题(加减乘除方法封装)处理
vue中高精度小数问题(加减乘除方法封装)处理
14 0
|
3天前
|
JavaScript
vue项目使用可选链操作符编译报错问题
vue项目使用可选链操作符编译报错问题
11 0
|
3天前
|
JavaScript
Vue项目启动报错处理
Vue项目启动报错处理
7 1
|
3天前
|
JavaScript
vue项目开发笔记记录(四)
vue项目开发笔记记录
40 0
|
3天前
|
JavaScript 定位技术
vue项目开发笔记记录(二)
vue项目开发笔记记录
43 0