vue 子组件触发父组件的方法

博客介绍了Vue的两种方法,但未详细说明方法具体内容。

方法一:

<template>//子组件
    <button @click="submit">提交</button>
</template>
<script>
export default {
  methods: {
    submit: function () {
      // 子组件中触发父组件方法并传值
      this.$emit('parentf', 'xxxx')
    }
  }
}
</script>

<template>//父组件
    <child @parentf="parentf"></child>
</template>
<script>
export default {
  methods: {
    parentf: function (str) {
      alert(str)
    }
  }
}
</script>

方法二:

<template>//子组件
    <button @click="submit">触发父方法</button>
</template>
<script>
export default {
  props: {
    parentF: {
      type: Function,
      default: null
    }
  },
  methods: {
    submit: function () {
      if (this.parentF) {
        this.parentF(‘xxxx’)
      }
    }
  }
}
</script>

<template>//父组件
    <child :parentF="parentF"></child>
</template>
<script>
export default {
  methods: {
    parentF: function (str) {
      alert(str)
    }
  }
}
</script>

 

### Vue 子组件触发父组件函数的方法Vue 中,子组件可以通过 `this.$emit` 方法触发父组件中绑定的事件监听器。这种方式类似于微信小程序中的 `triggerEvent`[^1] 和 Vue 自身的 `$listeners` 机制[^2]。 #### 实现方式 以下是通过 `this.$emit` 来实现子组件触发父组件函数的一个完整示例: ```vue <!-- 父组件 --> <template> <div> <!-- 将子组件嵌入并绑定自定义事件 --> <ChildComponent @child-event="handleChildEvent" :my-prop="message"></ChildComponent> <p>来自父组件的消息:{{ message }}</p> </div> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { components: { ChildComponent, }, data() { return { message: 'Hello, child component!', }; }, methods: { handleChildEvent(data) { console.log('收到子组件的数据:', data); alert(`子组件传来的消息是 "${data}"`); }, }, }; </script> ``` ```vue <!-- 子组件 --> <template> <button @click="sendDataToParent">点击我向父组件发送数据</button> </template> <script> export default { props: ['myProp'], // 接收父组件传递的参数 methods: { sendDataToParent() { const eventData = `${this.myProp} - 这是从子组件发出的信息`; this.$emit('child-event', eventData); // 触发父组件事件监听器 }, }, }; </script> ``` #### 关键点解析 1. **父子组件通信基础** 在 Vue 中,父组件可以将数据通过 `props` 下发给子组件,而子组件则可以通过 `this.$emit` 向父组件发送事件和数据[^4]。 2. **事件绑定与触发** 父组件通过 `@event-name="handler"` 的形式监听子组件发出的事件,当子组件调用 `this.$emit('event-name', payload)` 时,会触发表达式右侧的回调函数,并将 `payload` 数据作为参数传递给该回调函数。 3. **动态交互** 上述示例展示了如何利用 `props` 和 `events` 完成双向通信。父组件不仅能够控制子组件的行为,还可以接收其反馈信息。 --- ### 对比其他技术方案 - 如果项目复杂度较高,推荐使用状态管理工具(如 Pinia 或 Vuex)统一管理跨组件的状态共享问题[^4]。 - 插槽(Slot)机制虽然也可以用于内容分发,但它主要用于模板级别的定制化设计,而非直接的功能调用[^5]。 --- ### 注意事项 - 确保事件名称具有唯一性和语义化,避免与其他内置 DOM 事件冲突。 - 当多个子组件可能触发相同类型的事件时,建议附加额外标识符以便区分来源。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值