# 组件component(二)父组件和子组件之间传递数据

组件component(二)父组件和子组件之间传递数据

1.父组件=>子组件

由于组件实例的作用域是相互独立的,所以子组件的模板无法直接引用父组件的数据。可以通过props实现。是父组件用来传递数据的一个自定义属性,子组件需要**显式的用props选项**来声明Prop.
如果Prop传递的是一个数组或对象,那么它是按引用传递的。在子组件修改这个对象或者数组,则会影响父组件的状态

1.子组件=>父组件

如果子组件要把数据会传给父组件,需要使用自定义事件来实现。
父组件可以通过 v-on (缩写为 @) 来监听子组件实例的自定义事件,子组件可以直接使用 $emit 方法并传入事件名称来触发自定义事件

简单示例

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>父组件和子组件之间互相传送数据</title>
		<script src="js/v2.6.10/vue.min.js"></script>
	</head>
	<body>
		<div id="app">
			1.传递静态数据:<my-com my-message="新年快乐"></my-com>
			2.传递动态数据:<my-com :my-message="msg"></my-com>
			3.传递数组:<my-arr :arr='type'></my-arr>
			4.传递对象:<my-obj :stu='stu'></my-obj>
			5.传递对象属性:<my-obj2 v-bind='stu'></my-obj2>
			<span :style="{fontSize:fz+'px'}">6.子组件回传数据:</span>
			<my-font @action='rec'></my-font>
		</div>
		<script>
			Vue.component('my-com',{
				props:['myMessage'],
				template:'<div>{{myMessage}}</div>'
			})
			Vue.component('my-arr',{
				props:['arr'],
				template:'<ol><li v-for="value in arr" >{{value}}</li></ol>'
			})
			Vue.component('my-obj',{
				props:['stu'],
				template:'<div>{{stu.name}}--{{stu.age}}--{{stu.sex}}</div>'
			})
			Vue.component('my-obj2',{
				props:['name','age','sex'],
				template:'<div>{{name}}--{{age}}--{{sex}}</div>'
			})
			Vue.component('my-font',{
				template:'<div> \
					<button @click="enlarge(5)">向上传递单个数据</button> \
					<br><button @click="enlarge(childarr)">向上传递data中的对象据</button> \
					</div>',
				data(){
					return{
						childarr:{name:'张三',age:15,sex:'female'}
					}
				},
				methods:{
					enlarge(value){
						console.log('enlare text--',value)
						this.$emit('action',value)
					}
				}
			})
			var demo=new Vue({
				el:'#app',
				data:{
					msg:'新年第一天',
					type:['html','css','javascript'],
					stu:{name:'zhangsan',age:20,sex:'female'},
					fz:10
				},
				methods:{
					rec(rec1){
						console.log('父组件接收到的数据:',rec1);
						this.fz+=rec1
					
					}
				}
			})
		</script>
	</body>
</html>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值