当前位置:实例文章 » HTML/CSS实例» [文章]Vue:父组件触发子组件中的方法

Vue:父组件触发子组件中的方法

发布人:shili8 发布时间:2025-02-03 21:55 阅读次数:0

**Vue:父组件触发子组件中的方法**

在 Vue 的应用开发中,经常会遇到这样的场景:需要从父组件中触发子组件中的某个方法。这种需求是非常常见的,尤其是在复杂的应用中。

###1. 使用 $emit 和 $on最简单的方式就是使用 `$emit` 和 `$on` 来实现通信。父组件通过 `$emit` 发送事件,而子组件通过 `$on` 监听这个事件。

**父组件**

html<template>
 <div>
 <button @click="triggerEvent">触发事件</button>
 </div>
</template>

<script>
export default {
 methods: {
 triggerEvent() {
 this.$emit('my-event');
 }
 }
}
</script>


**子组件**
html<template>
 <div>
 <p>子组件</p>
 </div>
</template>

<script>
export default {
 mounted() {
 this.$on('my-event', () => {
 console.log('收到事件');
 });
 }
}
</script>


###2. 使用 $refs如果你需要在父组件中直接调用子组件的方法,可以使用 `$refs` 来实现。

**父组件**
html<template>
 <div>
 <child ref="child" />
 <button @click="triggerMethod">触发方法</button>
 </div>
</template>

<script>
import Child from './Child.vue';

export default {
 components: { Child },
 methods: {
 triggerMethod() {
 this.$refs.child.myMethod();
 }
 }
}
</script>


**子组件**
html<template>
 <div>
 <p>子组件</p>
 </div>
</template>

<script>
export default {
 methods: {
 myMethod() {
 console.log('执行方法');
 }
 }
}
</script>


###3. 使用 Vuex如果你的应用比较复杂,可以使用 Vuex 来实现状态管理。这样可以在任意组件中触发事件。

**store**
javascriptimport Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);

const store = new Vuex.Store({
 state: {
 count:0 },
 mutations: {
 increment(state) {
 state.count++;
 }
 }
});

export default store;


**父组件**
html<template>
 <div>
 <button @click="increment">触发事件</button>
 </div>
</template>

<script>
import store from './store';

export default {
 methods: {
 increment() {
 store.commit('increment');
 }
 }
}
</script>


**子组件**
html<template>
 <div>
 <p>子组件</p>
 </div>
</template>

<script>
import store from './store';

export default {
 mounted() {
 store.subscribe((mutation, state) => {
 console.log('收到事件', mutation.type);
 });
 }
}
</script>


### 总结在 Vue 的应用开发中,需要从父组件中触发子组件中的方法是非常常见的需求。上述三种方式都可以实现这个功能,但是使用 Vuex 来实现状态管理是最推荐的方式,因为它可以让任意组件之间进行通信。

**参考**

* [Vue.js]( />* [Vuex](

其他信息

其他资源

Top