vue.js js-在子组件中调用方法时,我得到“this.cancelOrderFunction不是一个函数”错误

7fyelxc5  于 2023-08-07  发布在  Vue.js
关注(0)|答案(1)|浏览(109)

我尝试在点击【确认取消】按钮时,触发一个方法,改变currentStatus变量的文本内容。此按钮位于对话框内的子组件中,而方法应位于父组件中。所以我尝试将此方法作为props传递给子组件。在编写如下代码后,我在控制台中得到错误“this.cancelOrderFunction不是函数”。我知道这是一个微小的错误,但无法找到它。我尝试用下面的代码解决这个错误。

changeStatus.vue(父组件)

<template>
    <cancelOrder :cancelOrderFunction="cancelOrderFunction"></cancelOrder>
</template>

<script>
import cancelOrder from "../components/cancelOrder.vue"; /*importing child component*/
export default {
  data: () => ({
    currentStatus: "ACTIVE",
  }),
  methods: {
    cancelOrderFunction() {
      this.currentStatus = "CANCELLED";
    },
  },
  components: {
    cancelOrder,
  },
};
</script>

字符串

cancelOrder.vue(子组件)

<template>
    <v-btn @click="confirmCancelOrder">Confirm Cancel</v-btn>
</template>

<script>
export default {
  props: ["cancelOrderFunction"],
  methods: {
    confirmCancelOrder() {
      this.cancelOrderFunction();
    },
  },
};
</script>

cancelOrder.vue组件由一个按钮取消订单组成,该按钮进一步打开一个对话框。该对话框由确认取消按钮组成,点击该按钮后,对话框关闭,同时触发cancelOrderFunction。在我的例子中,对话框始终关闭,但由于上述错误,方法没有被调用。

06odsfpq

06odsfpq1#

变量只能传递给子变量。如果你想从父级中的子级调用一个函数,你应该使用“emit”。
https://vuejs.org/guide/components/events.html#emitting-and-listening-to-events
将其绑定为v模型也是一个好主意。因为它将值和发射值绑定为一个。这一切都取决于案件。
下面是你应该如何使用emit的解决方案。告诉我你是不是这个意思。

changeStatus.vue(父组件)

<template>        
        <cancelOrder @cancel-order-function="cancelOrderFunction"></cancelOrder>
</template>
<script>
...
methods: {
    cancelOrderFunction(data) {
    //do whatever you want with data
    }
}
...
</script>

字符串

cancelOrder.vue(子组件)

<template>
    <v-btn @click="confirmCancelOrder">Confirm Cancel</v-btn>
</template>

<script>
export default {
  emits: ["cancel-order-function"],
  methods: {
    cancelOrderFunction() {
      this.$emit('cancel-order-function', data)
    },
  },
};
</script>

相关问题