vue 子组件调用父组件的方法4种方式

815 阅读1分钟

在Vue中,子组件有时需要调用定义在父组件中的方法。这种需求在开发过程中非常常见,Vue提供了4种不同的方式来实现这一点。

直接调用父组件方法

子组件可以通过this.$parent属性直接访问父组件的实例,从而调用父组件的方法。这种方式简单直接,但不推荐在嵌套层级较深的组件中使用,因为这会使得组件间的耦合度增加,不利于代码的维护和复用。例如:

// 子组件中
methods: {

childMethod() {

    this.$parent.fatherMethod();

    }

}

使用$emit触发事件

子组件可以使用 $emit来触发一个事件,父组件监听这个事件并执行相应的方法。这是Vue官方推荐的方式,因为它可以减少组件间的直接依赖,使得组件更加独立。例如:

// 子组件中
methods: {

childMethod() {

    this.$emit('fatherMethod');

    }

}

// 父组件中

<child @fatherMethod="fatherMethod"></child>

通过props传递方法

父组件可以通过props将方法传递给子组件,子组件通过props接收这个方法并调用。这种方式适用于不太复杂的场景,可以避免使用 $parent带来的耦合问题。例如:


// 父组件中

<child :fatherMethod="fatherMethod"></child>

// 子组件中

props: {

fatherMethod: Function

},

methods: {

childMethod() {

    this.fatherMethod();

    }

}

使用provide和inject

在组件嵌套层级较深的情况下,provideinject可以提供一种跨层级的方法或数据传递方式。父组件使用provide来定义可以被子孙组件注入的数据或方法,子孙组件使用inject来接收这些数据或方法。这种方式可以避免层层传递props带来的复杂性。例如:

// 父组件中

provide() {

return {

fatherMethodthis.fatherMethod

};

}

// 子组件中

inject: ['fatherMethod'],

methods: {

childMethod() {

this.fatherMethod();

}

}

以上就是在Vue中子组件调用父组件方法的几种常见方式。每种方式都有其适用的场景和优缺点,可根据实际需求和项目结构选择最合适的方式。