【问题标题】:Angular form is undefined when submitting via ngSubmit通过 ngSubmit 提交时未定义 Angular 表单
【发布时间】:2019-10-09 00:56:30
【问题描述】:

我的 app.component.html 文件中列出了一个表单,如下所示,当我单击“发送”按钮提交表单时,我的 Javascript 中出现错误,提示 chatForm 未定义。

我查看了一些不同的教程,但我似乎无法找到为什么此功能没有按预期运行。我究竟做错了什么?

另外,当我提交表单时,如何获取表单中存在的输入值?我在表单上定义了一个名称message,我该如何使用这个变量?

app.component.html

<div class="container">
    <h2>Message Form</h2>
    <form (ngSubmit)="sendMessage(chatForm)" #chatForm="ngForm">
        <div>
            <label for="message">Message</label>
            <input type="text" id="message" name="message" [(ngModel)]="message" required>
        </div>
        <button type="submit" id="sendmessage" [disabled]="!chatForm.valid">
            Send
        </button>
    </form>
</div>

app.component.ts

public sendMessage(form): void {
    console.log("Message sent: " + form.value);
}

【问题讨论】:

  • 你在 app.component.ts 中定义了@ViewChild('chatForm') form 吗?
  • @Viqas 我没有,应该在哪里定义?
  • 无需使用ViewChild

标签: javascript angular typescript single-page-application angular8


【解决方案1】:

你应该通过使用来获取数据

form.value.message

我的例子是这样的

  <form (ngSubmit)="onSubmit(registerForm)" #registerForm="ngForm">
    <div class="form-group">
      <label for="UserName">Your email</label>
      <input
        type="text"
        ngModel
        class="form-control"
        id="UserName"
        name="UserName"
        required
      />

然后在我的组件中我可以像这样访问表单数据

onSubmit(formValue: NgForm) {
    const registerModel: AccountModel = {
      UserName: formValue.value.UserName,
      Password: formValue.value.Password
    };

【讨论】:

  • 我已经编辑了我的代码,它现在可以正常工作并提交,谢谢!我添加了一些不同的东西,所以我不确定是哪一个导致了错误。是因为我没有在我的函数中定义formValue: NgForm 吗?还是因为我的 HTML 中缺少 form-groupform-control?还是因为我有[(ngModel)] = message 而不仅仅是ngModel
  • 我认为错误来自您的[(ngModel)] = message,因为您使用的是 2 路绑定
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-16
相关资源
最近更新 更多