11 Vue 父子组件之间更多的传递方式总结~拿去用不用谢

父子组件之间更多的传递方式

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8">
		<title>Title</title>
		<script src="../vue.js"></script>
		
	</head>
	<body>
		<div id="app">
			<!-- 父组件通过 属性向子组件传值  count="0" 传入子组件时,是字符串  :count="0"  加个:,这时就是一个js表达式了传过去的值 是数值0-->
			<counter :count="0" ></counter>
			<counter :count="1"></counter>

		</div>

		<script >
			var counter ={
				//子组件接收父组件传过来的值使用的是props
				props: ['count'],   //接收过来后,在子组件中就可以使用count传递过来的值了
				template:"<div>{{count}}</div>"
			}
			var vm = new Vue({
				el:"#app",
				components:{
					counter:counter
				}			
			})
		</script>

	</body>
</html>

增加点击数字的事件,在模板里增加 @click='handleClick'  

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8">
		<title>Title</title>
		<script src="../vue.js"></script>
		
	</head>
	<body>
		<div id="app">
			<!-- 父组件通过 属性向子组件传值  count="0" 传入子组件时,是字符串  :count="0"  加个:,这时就是一个js表达式了传过去的值 是数值0-->
			<counter :count="0" ></counter>
			<counter :count="1" ></counter>

		</div>

		<script >
			var counter ={
				//子组件接收父组件传过来的值使用的是props
				props: ['count'],   //接收过来后,在子组件中就可以使用count传递过来的值了
				data: function() {   //在子组件中绑定写数据需要定义函数形式来实现。
						return {
							number: this.count
						}
				},
				//增加监听点击事件handleClick事件
				template:"<div @click='handleClick'>{{number}}</div>",
				methods:{
					handleClick:function() {
						this.number ++
					}
				}
			}
			var vm = new Vue({
				el:"#app",
				components:{
					counter:counter
				}			
			})
		</script>

	</body>
</html>

增加子组件向父组件进行增加的值。this.$emit() 从子组件,向父组件触发事件。然后绑定事件handleIncrease   ,在主控件中handleIncrease 事件。

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8">
		<title>Title</title>
		<script src="../vue.js"></script>
		
	</head>
	<body>
		<div id="app">
			<!-- 父组件通过 属性向子组件传值  count="0" 传入子组件时,是字符串  :count="0"  加个:,这时就是一个js表达式了传过去的值 是数值0-->
			<counter :count="0" @inc="handleIncrease"></counter>
			<counter :count="1" @inc="handleIncrease"></counter>
			<div>{{total}}</div>

		</div>

		<script >
			var counter ={
				//子组件接收父组件传过来的值使用的是props
				props: ['count'],   //接收过来后,在子组件中就可以使用count传递过来的值了
				data: function() {   //在子组件中绑定写数据需要定义函数形式来实现。
						return {
							number: this.count
						}
				},
				//增加监听点击事件handleClick事件
				template:"<div @click='handleClick'>{{number}}</div>",
				methods:{
					handleClick:function() {
						this.number = this.number + 2;
						this.$emit('inc',2)
					}
				}
			}
			var vm = new Vue({
				el:"#app",
				components:{
					counter:counter
				},
				data:{
					total: 5
				},
				methods:{
					handleIncrease:function(step) {
						// alert(step)
						this.total +=step;
					}
				}			
			})
		</script>

	</body>
</html>

结果,点击 6 或7 每次增加2 。因为 传递使用了  step  传递过去了。

单向数据流的规定:父组件可以向子组件传递任何的值,但是子组件不能修改父组件传递过来的值,如果一定要修改就拷贝一份复本出来。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值