前端vue的父模块给子模块相互发送消息与接收消息

本文详细介绍了在Vue.js中如何进行父子组件间的通信,包括通过props从父组件向子组件传递数据,通过$emit从子组件向父组件发送事件,以及父组件如何通过ref调用子组件的方法。示例代码展示了具体实现过程,帮助开发者理解Vue组件间交互的基本机制。
摘要由CSDN通过智能技术生成

消息传递:

  • 父传子:通过 props 向子组件传递数据
  • 子传父:通过 $emit 向父组件发送事件
  • 父调用子方法:通过子标签设置ref来调用子方法

例子:

子模块:

//1. 使用template嵌套
<template>
  <div @click="close">我是子模块,父模块传来了:{{parentValue}}</div>
  <div @click="sendData">点击我可以发送数据给父模块</div>
</template>
<script>
    export default {
        name: "childDiv",//2. 子模块名字,对应父模块的标签名
        data(){
            return{
                
            }
        }
        props:{
          //3. 这是父模块携带的数据,子模块不能直接改变值,两种任选一种
          parentValue:true,	//1
          parentValue{		//2
        		type: String
        		default: '默认值'
    		}
        },
      
        methods:{
          close(){
            this.$emit('closepop'); //4. 给父模块发送消息。
          },
          sendData(){
              this.$emit('sendMsg', 123);
          },
          receiveParent(val){	//10 接收父模块发来消息
              console.log("父模块发来了消息:" + val);
          }
        }
    }
</script>

父模块:

<body>
    <div @click="clickParent()">我是父模块</div>
    
    //7. 子模块标签,下面使用任意一个就行,推荐第2个,根据驼峰装换标签大写字母变为小写前面加-,例如“aBc-> a-bc”
    <childDiv>第一种写法</childDiv>
    // ref为父模块调用子模块方法时使用
    // :parentValue是传给子模块props里对应的值
    // @sendMsg与@closepop用于接收子模块调用$emit的事件
    <child-div ref="childModel" :parentValue='我是传给子模块的值' @sendMsg="getChildMsg" @closepop="getChildEmptyMsg" >第二种写法</child-div>
</body>
<script>
    //5. 导入子模块文件
    import childDiv from './child.vue'
    
    export default {
        
        data(){
            
        }
        //6. 引入子模块
        components: {
          childDiv,
          ...
        },
        methods:{
            //8. 接收子模块数据
            getChildMsg(msg){
                console.log("这是子模块发来的消息:" + msg);
            },
            getChildEmptyMsg(){
                console.log("这是子模块发来的空消息");
            },
            //9. 父模块调用子模块的方法
            clickParent(){
              this.$refs.childModel.receiveParent(‘哈哈哈哈’)  
            }
        }
    }
</script>
Vue.js中,子组件组件传递数据通常有多种方式。主要的途径包括属性绑定、自定义事件、以及props的双向数据绑定等。这里详细解释一下这些方式: ### 1. 属性传递 (Props) **简介**: props是用于从组件到子组件的数据流动的一种方式,它允许组件向子组件传递数据。 **示例**: 假设我们有一个名为`Detail`的子组件,它接收`product`属性,并在其内部展示这个产品信息: ```html <!-- 子组件 Detail.vue --> <template> <div> Product Name: {{ product.name }}<br/> Product Price: {{ product.price }} </div> </template> <script> export default { name: 'Detail', props: ['product'], }; </script> ``` 并且在组件中使用这个子组件: ```html <!-- 组件 Example.vue --> <template> <div> Parent component showing a detail of the product. <detail :product="currentProduct"></detail> </div> </template> <script> import Detail from '@/components/Detail.vue'; export default { components: { Detail, }, data() { return { currentProduct: { name: 'Example Product', price: 49.99, }, }; }, }; </script> ``` ### 2. 自定义事件 (Emitting Custom Events) 除了通过属性传递数据之外,Vue还支持通过自定义事件(custom events)让子组件通知组件一些操作的结果或改变的情况。 **示例**: 假设我们需要一个子组件能够通知组件其状态发生变化,比如按钮被点击了,我们可以这样做: ```html <!-- 子组件 ButtonClick.vue --> <template> <button @click="$emit('on-click')">Click me</button> </template> <script> export default { emits: ['on-click'], // 定义要发送组件的事件名称 }; </script> ``` 并在组件接收这个事件: ```html <!-- 组件 Parent.vue --> <template> <div> Child component actions can be observed here. <buttonclick></buttonclick> <p v-if="clicked">Button was clicked!</p> </div> </template> <script> import ButtonClick from '@/components/ButtonClick.vue'; export default { components: { ButtonClick, }, data() { return { clicked: false, }; }, methods: { handleButtonClick() { console.log("Button was clicked!"); this.clicked = true; }, }, }; </script> ``` 通过以上两种方式,你可以有效地在Vue应用中实现组件间的数据交换。这使得Vue的应用结构清晰、功能模块化,便于管理和维护。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值