当前位置: 首页 > 知识库问答 >
问题:

在Vue中处理子提交事件,然后使用组合API处理父提交事件

赵献
2023-03-14

Vue.js新手,尝试在表示表单的组件中处理提交事件,该表单将检查子组件的有效性,并在一切正常的情况下将处理传递给父组件中的事件处理程序。

我得到这个错误。。。[Vue warn]:v-on处理程序中的错误:“TypeError:undefined不是在中找到的对象(计算“$event.preventDefault”)”---

子组件是MyForm。。。

<template lang="pug">
  form(@submit.prevent='onFormSubmit', novalidate, autocomplete='on')
    slot Content needed in MyForm
</template>

<script lang="ts">
import { defineComponent } from "@vue/composition-api"
export default defineComponent({
  name: "MyForm",
  setup(_, { emit }) {
    const onFormSubmit = () => {
      console.log("MyForm:onFormSubmit() - called first")
      // Validate child components, if invalid, STOP, otherwise continue...
      emit("submit") // errors
    }
  },
})

父组件(应用程序)。。。

<template lang="pug">
#app
  .container
    MyForm(@submit.prevent='onSubmit')
      ...other components
</template>

<script lang="ts">
import { defineComponent } from "@vue/composition-api"
import MyForm from "@/components/MyForm.vue"

export default defineComponent({
  name: "App",
  components: {
    MyForm,
  },
  setup() {
    const onSubmit = (): void => {
      console.log("App.vue:onSubmit() - called second")
    }
    return { onSubmit }
  }
</script>

或者,将应用程序的onSubmit()函数作为道具传递给MyForm会更好吗?我可以在MyForm中进行验证,然后调用传入函数?

共有1个答案

轩辕乐邦
2023-03-14

TL;博士:

从父应用程序中删除。阻止

说明:

如注释中所述,您不需要在自己的父组件中使用.prevent。事件上的.prevent基本上阻止了默认事件的传播。因此,例如,在您的表单(@submit.prevent='onFormSubmit')中,当您的表单通常会被提交时(例如按enter键),正常提交事件将被阻止,而您的方法onFormSubmit将被调用。

但在父组件中,没有要防止的默认javascript事件。这就解释了为什么会出现错误TypeError:undefined不是对象(计算“$event.preventDefault”)-没有$event,因此它是undefined。而未定义不是对象。

 类似资料:
  • 1. 前言 本小节我们介绍 Vue 中如何进行事件处理。在章节 2.2 中我们已经介绍了指令 v-on,本章节我们将详细介绍在 v-on 的一些用法。包括如何传递参数、如何使用事件修饰符等。其中,事件修饰符是本章节的难点。事件修饰符很多,同学们不需要一下子都记住,只要学会如何使用它,在开发过程中如果有所遗忘,可以通过翻看文档来使用。 2. 慕课解释 可以用 v-on 指令监听 DOM 事件,并在触

  • 监听事件 可以用 v-on 指令监听 DOM 事件来触发一些 JavaScript 代码。 示例: <div id="example-1"> <button v-on:click="counter += 1">增加 1</button> <p>这个按钮被点击了 {{ counter }} 次。</p> </div> var example1 = new Vue({ el: '#exa

  • 如果我正在读写本地文件,那么对远程数据库服务器的更新相对昂贵。如果增加[chunk-size],内存使用量就会上升。 提交频率对编写本地文件并没有太大的影响,所以对我来说,元数据更新才是一个问题。该步骤是可重新启动的,因此从技术上讲,我不需要记录中间提交计数。 对于JobRepository,我可以只使用map或内存数据库,但我需要其他信息,例如持久化的开始/结束时间,而且这个问题只涉及一个步骤。

  • 问题内容: 我有一个问题。我有多个表单元素(带有的表单),我还使用AJAX 添加了另一个表单元素。因此,我希望它处理类似的Submit事件: 但是添加了AJAX的表单无法使用。 问题出在哪里?是虫子吗? 问题答案: 您需要将事件委托给文档级别 的工作原理与您使用时相同,但也适用于以后添加的DOM。

  • 父组件中如何处理子组件内点击事件

  • 我们需要在constructor中对于事件与对应的handler函数进行绑定. 大多数时候我们在发出DOM事件的组件内部写我们的handler函数. 在下面的例子中,我们在组件内部创建了一个click handler, 因为我们想所有的Swithcer Component当被点击时,做出同样的响应. class Switcher extends React.Component { render