【问题标题】:Angular Forms: Cannot find form control in Angular FormsAngular 表单:在 Angular 表单中找不到表单控件
【发布时间】:2020-04-20 16:02:03
【问题描述】:

我正在尝试在我的 Angular 表单中设置值,但我收到错误消息“找不到名称为 eDate 的表单控件。在 FormGroup._throwIfControlMissing (forms.js:5225)”。

我的表单 html 如下所示:

<form class="kt-form add-form" name="editEvent" #editEvent="ngForm" (ngSubmit)="openDialog(editEvent)" id="kt_login_form">
    <div class="row">
        <div class="form-group col-md-12">
            <label>Event Title</label>
            <input class="form-control" ngModel #title="ngModel" type="text" placeholder="Set title for event" name="title" autocomplete="off" required/>
        </div>
    </div>
    <div class="row">
        <div class="form-group col-md-12">
            <label>All Day</label>
            <input class="form-control" ngModel #allDay="ngModel" type="checkbox" name="allDay" id="allDay" autocomplete="off" 
            [(ngModel)]="theCheckbox"  data-md-icheck (change)="toggleVisibility($event)"/>
        </div>
    </div>
    <div class="row" *ngIf="!marked">
        <div class="form-group col-md-12">
            <label>Start Date/Time</label>
            <input class="form-control" ngModel #startTime="ngModel" type="datetime-local" placeholder="Set start date & time" name="startTime" id="startTime" autocomplete="off" min="2020-01-01T00:00:00" max="2030-12-31T00:00:00" required/>
        </div>
        <div class="form-group col-md-12">
            <label>End Date/Time</label>
            <input class="form-control" ngModel #endTime="ngModel" type="datetime-local" placeholder="Set end date & time" name="endTime" id="endTime" autocomplete="off" required/>
        </div>
    </div>
    <div class="row" *ngIf="marked">
        <div class="form-group col-md-12">
            <label>Event Date</label>
            <input class="form-control" ngModel #eDate="ngModel" type="date" placeholder="Set event date" name="eDate" id="eDate" autocomplete="off" required/>
        </div>
    </div>
</form>

请注意,在这里,我有两个基于条件的 DIV。因此,如果我的活动是 ALL DAY 活动,我只是在表单内设置活动日期,如果我的活动不是 ALL DAY 活动,那么我将设置 START TIME 和 END TIME 的值。

我的组件如下所示:

import { Component, OnInit, ViewChild } from '@angular/core';
import { AuthService } from '../auth/auth.service';
import { Router, ActivatedRoute } from '@angular/router';
import { NgForm } from '@angular/forms';
import * as moment from 'moment';

@Component({
  selector: 'app-edit-event',
  templateUrl: './edit-event.component.html',
  styleUrls: ['./edit-event.component.css']
})
export class EditEventComponent implements OnInit {
  @ViewChild('editEvent', null) editEvent: NgForm;
  user: firebase.User;
  id: any;
  marked: boolean;

  constructor(
    private auth: AuthService, 
    private router: Router, 
    private actRoute: ActivatedRoute
  ) {
    this.id = this.actRoute.snapshot.paramMap.get('id');
    this.auth.getEvent(this.id).valueChanges().subscribe(res => {

        if(res.allDay == true) {
        this.marked = true;
        this.editEvent.setValue({
          title: res.title,
          allDay: res.allDay,
          eDate: moment(new Date(res.startTime)).format('YYYY-MM-DD'),
          startTime: '',
          endTime: ''
        });
      } else {
        this.editEvent.setValue({
          title: res.title,
          allDay: res.allDay,
          startTime: moment(new Date(res.startTime)).format('YYYY-MM-DDTHH:mm'),
          endTime: moment(new Date(res.endTime)).format('YYYY-MM-DDTHH:mm'),
          allDay: ''
        });
      }
    });
  }
}

我能够成功设置我的表单值,当事件不是 ALL DAY 事件(请参阅其他条件)但当我的事件是 ALL DAY 事件时,我在设置“eDate”值时出错。知道我在这里做错了什么吗???请帮忙。

【问题讨论】:

  • 您的结束日期包含在 *ngIf="!marked" 中。在设置值之前设置marked = false。可能是控件不可用。
  • 如果我初始化标记为 false 的值,这会给我同样的错误。

标签: javascript angular angularjs-ng-form


【解决方案1】:

在您的 EditEventComponent.ts 中,如果 eDate 通常表示 END DATE,那么对于 all day 事件,您将设置 eDate。您能否确认是否需要为 ALL DAY 事件或不需要为 all Day 事件设置 eDate ?你能确认一下吗

【讨论】:

  • 当活动是 ALL DAY 活动时设置我的 eDate。
  • 这就是为什么,我的条件是“res.allDay == true”
  • 是的,您可以尝试在 html 中使用 formControlName = "eDate" 而不是 name="eDate"
猜你喜欢
  • 1970-01-01
  • 2019-09-24
  • 1970-01-01
  • 1970-01-01
  • 2021-12-04
  • 2016-09-18
  • 1970-01-01
  • 2022-07-29
  • 2018-11-27
相关资源
最近更新 更多