【问题标题】:Getting all values of a form in angular2在angular2中获取表单的所有值
【发布时间】:2019-07-04 04:36:09
【问题描述】:

我可以使用以下代码获取表单的值:

<input type="text" formControlName="subscriptionFormName" id="subscriptionFormName" #UserName class="form-control" mdbInputDirective>
<button class="btn btn-indigo btn-lg btn-block waves-light" type="button" (click)="OnSubmit(UserName.value)" mdbWavesEffect>Send
    <i class="fa fa-paper-plane-o ml-1"></i>
</button>

但我需要的是获取表单的所有值,以便我可以这样做:

<button class="btn btn-indigo btn-lg btn-block waves-light" type="button" (click)="OnSubmit(allFormValues)" mdbWavesEffect>Send
    <i class="fa fa-paper-plane-o ml-1"></i>
</button>

user: User;
ObSubmit(values) {
    user.UserName = values.UserName;
    user.Password = values.Password;
    ......
}

下面是整个代码:

<div class="row">
  <div class="col-md-12 text-left">

    <form [formGroup]="subscriptionForm">
      <h3 style="color: gray; text-align: center;">Registration</h3>

      <div class="row">
        <div class="col-md-6">
          <div class="md-form">
            <i class="fa fa-user prefix grey-text"></i>
            <input type="text" formControlName="UserName" id="UserName" class="form-control" mdbInputDirective>
            <label for="UserName">Your UserName</label>
          </div>
          <br>
          <div class="md-form">
            <i class="fa fa-user prefix grey-text"></i>
            <input type="text" formControlName="FirstName" id="FirstName" class="form-control" mdbInputDirective>
            <label for="FirstName">Your First name</label>
          </div>
        </div>
        <div class="col-md-6">
          <div class="md-form">
            <i class="fa fa-user-secret prefix grey-text"></i>
            <input type="password" id="Password" formControlName="Password" class="form-control" mdbInputDirective>
            <label for="Password">Your password</label>
          </div>
          <br>
          <div class="md-form">
            <i class="fa fa-user-user prefix grey-text"></i>
            <input type="text" id="LastName" formControlName="LastName" class="form-control" mdbInputDirective>
            <label for="LastName">Your Last name</label>
          </div>
        </div>
      </div>
      <br>
      <div class="row">
        <div class="col-md-12">
          <div class="md-form">
            <i class="fa fa-envelope prefix grey-text"></i>
            <input type="email" id="Email" formControlName="Email" class="form-control" mdbInputDirective>
            <label for="Email">Your Email</label>
          </div>
          <br>
          {{subscriptionForm.value|json}}
          <br>
          <div class="text-center">
            <button class="btn btn-indigo btn-lg btn-block waves-light" type="button" (click)="OnSubmit()" mdbWavesEffect>Send
              <i class="fa fa-paper-plane-o ml-1"></i>
            </button>
          </div>
        </div>
      </div>
    </form>

  </div>
</div>

import { User } from './../../shared/user.model';
import { Component, OnInit } from '@angular/core';
import { FormGroup, FormBuilder, Validators } from '@angular/forms';

@Component({
  selector: 'app-register',
  templateUrl: './register.component.html',
  styleUrls: ['./register.component.scss']
})
export class RegisterComponent implements OnInit {
  subscriptionForm: FormGroup;
  user: User;

  constructor(private fb: FormBuilder) {
    this.subscriptionForm = fb.group({
      UserName: ['', Validators.required],
      Password: ['', Validators.required],
      Email:    ['', Validators.required, Validators.email],
      FirstName: ['', Validators.required],
      LastName: ['', Validators.required]
    });
  }

  ngOnInit() {
  }

  OnSubmit() {
   this.user = this.subscriptionForm.value;
   console.log(this.user);
  }

}

当我使用#subscriptionForm="ngForm" 时出现错误。可能是因为[formGroup]="subscriptionForm"。我不知道什么是反应形式或其他形式。我会在这之后研究,但你能帮我吗?谢谢。

【问题讨论】:

  • 请查看我的编辑。我不知道有什么区别。
  • 我希望你明白我编辑的帖子的意思。
  • 请更改您的控件名称,类似于您的用户类中的名称,然后按照我的建议进行操作,您不需要做太多
  • 是的,我明白你的意思。我将编辑我的帖子以反映它。
  • 我用过,但它给了我空值。

标签: html angular


【解决方案1】:

已接受的答案已过时,不再适用于 Angular 8+,这可以很好地获取您的所有值:

for (const field in this.myForm.controls) { // 'field' is a string
  console.log(this.myForm.controls[field].value);
}

【讨论】:

  • 为什么userForm.values 不再起作用了?你有消息来源可以确认吗?
  • @marcel 不知道。资源?当我遇到问题时,文档并没有帮助我。我只是在表单对象中进行了一些挖掘才弄明白。
【解决方案2】:

Working Demo 基于您的输入问题。

不要将响应式表单方法与模板驱动方法混合使用,否则您最终会遇到很多问题。在一个组件中遵循其中之一。当您遵循响应式表单时,请仅遵循该表单。

这意味着您不能使用#subscriptionForm="ngForm" 作为其模板驱动的表单方法。


我建议您使用响应式表单方法,这样您就可以一次获得所有表单值

 user = userForm.value ;

但为此,您需要自己装箱并这样做

<form [formGroup]="userForm">
  <div class="form-group">
    <label class="center-block">Name:
      <input class="form-control" formControlName="name">
    </label>
  </div>
</form>

ts 文件

 User:user;
 constructor(private fb: FormBuilder) {
    this.createForm();
  }

  createForm() {
    //form control name should match with User class property name
    this.userForm= this.fb.group({
      name: ['', Validators.required ],
      street: '',
      ..other property
    });
  }

  submit() {
   this.user = userForm.value;
   //if property doesnt match then do this 
   this.user.Name = this.userForm.get('name').value;
   ..do for all property 
  }

无法详细解释,请按此操作:https://angular.io/guide/reactive-forms

【讨论】:

  • 我跟着这个,但我得到一个空值。请查看我的编辑。
  • @stackquestions - mdbInputDirective 似乎有问题,因为它使用您给出的代码在 stackbiz 工作
  • 我将您的代码复制并粘贴到我的代码中。我仍然无法让它工作!谢谢你这么耐心。
  • 我将您的代码复制并粘贴到我的。但我仍然无法让它工作。谢谢你这么耐心..
  • @stackquestions - 所以它根本不起作用,html 也没有显示 json 值 ....stackbiz 对你有用吗?
【解决方案3】:

使用 NgModel 获取表单中每个标签的数据 试试这个:添加属性到输入标签[(ngModel)]="password"

Component:
password; 
password_com;

this.password_com=this.password;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-02
    • 2021-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多