美文网首页
Vue 组件间事件传递与方法调用

Vue 组件间事件传递与方法调用

作者: 大成小栈 | 来源:发表于2024-09-24 18:10 被阅读0次

在 Vue 3 中,组件间的事件和方法调用是实现交互的关键。通过理解子组件如何触发父组件的方法以及父组件如何调用子组件的方法,可以更高效地组织和管理你的 Vue 应用。本文将详细介绍这两个方面的实现方式。

1. 子组件调用父组件的方法

在 Vue 3 中,子组件可以通过 $emit 方法触发父组件定义的方法。这是一个非常常见的场景,例如,用户在子组件中提交表单时,可以通过事件通知父组件。

1.1 使用 emit 方法(Vue 3.0)

子组件:

<script>
export default {
  emits: ['submit'],
  setup(props, ctx) {
    // 触发 'submit' 事件并传递参数
    const params = { /* 你的参数 */ };
    ctx.emit('submit', params);
  }
}
</script>

父组件:

<template>
  <Children @submit="submitHandel"/>
</template>

<script>
export default {
  name: 'TodoItem',
  setup(props, { emit }) {
    const submitHandel = (params) => {
      console.log('子组件调用了父组件的submitHandel方法', params);
    };
    
    return {
      submitHandel,
    };
  }
};
</script>

1.2 使用 defineEmits() 宏(Vue 3.2)

在 Vue 3.2 中,你需要显式地声明子组件要触发的事件。

子组件:

<script setup>
const emit = defineEmits(['submit']);

function buttonClick(params) {
  emit('submit', params);
}
</script>

父组件与之前相同:

<template>
  <Children @submit="submitHandel"/>
</template>

<script setup>
const submitHandel = (params) => {
  console.log('子组件调用了父组件的submitHandel方法', params);
};
</script>

2. 父组件调用子组件的方法或属性

父组件也可以通过 ref 直接调用子组件的方法或访问其属性。这在需要控制子组件行为的场景中非常有用。

2.1 Vue 3.0 中的实现

子组件:

<script>
import { ref } from 'vue';

export default {
  setup(props, { emit }) {
    const isShow = ref(false);

    // 父组件可以调用这个方法
    const showSubComponent = () => {
      isShow.value = !isShow.value;
    };
    
    return {
      showSubComponent,
    };
  }
}
</script>

父组件:

<template>
  <div class="todo-list">
    <TodoItemVue :itemList="itemList" ref="todoItemVueRef" />
  </div>
</template>

<script>
import { ref } from 'vue';

export default {
  setup(props, { emit }) {
    const todoItemVueRef = ref(null);

    // 调用子组件的方法
    const callItemFuncHandel = () => {
      todoItemVueRef.value.showSubComponent();
    };

    return {
      todoItemVueRef,
      callItemFuncHandel
    };
  }
};
</script>

2.2 Vue 3.2 中的实现

在 Vue 3.2 中,子组件需要使用 defineExpose() 显式暴露其方法。

子组件:

<script setup>
import { ref } from 'vue';

const isShow = ref(false);

const showSubComponent = () => {
  isShow.value = !isShow.value;
};

// 通过 defineExpose 将方法暴露出去
defineExpose({
  showSubComponent
});
</script>

父组件保持不变:

<template>
  <div class="todo-list">
    <TodoItemVue :itemList="itemList" ref="todoItemVueRef" />
  </div>
</template>

<script setup>
import { ref } from 'vue';

const todoItemVueRef = ref(null);

const callItemFuncHandel = () => {
  todoItemVueRef.value.showSubComponent();
};
</script>

结论

通过理解 Vue 3 中子组件与父组件之间的事件和方法调用,你可以构建更加灵活和响应迅速的应用。使用 emitdefineEmits() 方法来处理事件,以及使用 refdefineExpose() 来实现父子组件的交互,使得你的代码更具可读性和可维护性。希望这篇文章能帮助你更好地理解和使用 Vue 3 的组件间通信机制!

相关文章

  • Vue父组件调用子组件事件

    Vue父组件向子组件传递事件/调用事件 不是传递数据(props)哦,适用于 Vue 2.0 方法一:子组件监听父...

  • Vue自定义组件

    简单组件展示 组件和页面类似 局部注册 vue页面注册局部组件 引入局部组件 调用 展示 组件间的数据和事件传递 ...

  • 关于$refs的用法

    $refs父组件调用子组件的方法,可以传递数据。 示例 父组件 $refsFa.vue 子组件 emitCh.vu...

  • Vue.js组件间调用及传值 2020最新更新

    Vue.js中,对于父子组件、平级组件间的事件触发、传值等。 调用 父组件 子组件 子组件调用父组件 子组件 触发...

  • vue2.0中子组件向父组件传递消息

    vue中子组件向父组件传递消息 核心方法 当子组件中调用vm.$emit('event-name','messag...

  • vue组件间参数与事件传递

    父组件向子组件传值 以及父组件调用子组件方法 子组件向父组件传值 以及子组件触发调用父组件方法

  • vue 事件传递的原理

    vue的事件机制中,通过父组件模版中@一个事件,子组件emit('xx')事件名的方式实现子组件调用父组件的方法。...

  • react子组件向父组件传值

    将父组件的方法传递给子组件,子组件通过this.props调用传递过来的方法,并带上参数 父组件 子组件 调用传递...

  • vue.js 核心知识点三

    目录 - 3.1 vue中子组件调用父组件的方法 - 3.2 Vue父组件调用子组件的方法 - 3.3 涉及到组件...

  • 编程大白话之-vue页面之间方法的互调

    整理一下vue页面间常用的调用方法 一、父组件调用子组件的方法 1.利用ref 2.通过组件的on方法; 二、子组...

网友评论

      本文标题:Vue 组件间事件传递与方法调用

      本文链接:https://www.haomeiwen.com/subject/gqmqrjtx.html