vue组件间通信

一.父组件给子组件传值

1.父组件给子组件组件标签上绑定属性名,子组件通过props接收

父组件:
<template>
    <div>
        <son :id="id"/>
    </div>
</template>
<script>
    import son from './components/son.vue'
    export default{
        components:{
            son
        }
        data:{
            return{
                id:1
            }
        }
    }
</script>
子组件:
<template>
    <div>
        {{id}} // 1
    </div>
</template>
<script>
    export default{
        props:['id']
    }
</script>

2.通过给子组件绑定自定义事件的方式传递数据

// 父组件
<template>
    <div>
        <child @getName="getName"><child>
    </div>
</template>
<script>
    import child from './components/child.vue'
    export default{
        methods:{
            getName(name){
                console.log(name)
            }
        }
    }
</script>
// 子组件
<template>
    <div>
        <button type="button" @click="handle"></button>
    </div>
</template>
<script>
    export default{
        data(){
            return {
                name:'zhangsan'
            }
        },
        methods:{
            handle(){
                this.$emit('getName',this.name)
            }
        }
    }
</script>

二.子组件给父组件传值

1.通过参数形式传值

①.在父组件中定义一个方法,给子组件组件标签上绑定这个方法传给子组件

②.再通过子组件用props接收这个方法,就可以调用这个方法,把需要传的数据当作实参传回给父组件

③.父组件接收这个参数

父组件:
<template>
  <div id="app">
    <son :add="add"/>
  </div>
</template>
<script>
    export default{
        data(){
            return{
                list:[1,2,3,4]
            }
        }
        methods:{
			add(x){
				this.list.unshift(x)
			}
		}
    }
</script>
子组件:
<template>
	<div>
		<input type="text" placeholder="请输入任务名称" @keyup.enter="add1">
	</div>
</template>

<script>
	export default{
		methods:{
			add1(e){
				this.add(e.target.value)
			}
		},
		props:['add']
	}
</script>



三.任意组件间通信

1.全局事件总线

①.安装全局事件总线

new Vue({
    ....
    beforeCreate(){
        Vue.prototype.$bus = this 
    }
})

本质就是在Vue实例创建之前把Vue作为在Vue自身的原型上绑定的一个方法,组件间就能调用$on绑定自定义事件,调用$emit触发自定义事件

②.使用

绑定/接收数据:

method(){
    demo(data){...}  
},
mounted(){
    this.$bus.$on('...',this.demo)
}

触发/提供数据:

this.$bus.$emit('...',数据)

 ③.注意事项:最好在beforeDestroy钩子中,用$off解绑当前组件所用到的事件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值