Syncfusion日期选择器不适用于角度反应形式

时间:2019-01-22 22:40:18

标签: datepicker angular-reactive-forms angular7 syncfusion

在Angular 7.0项目中,我使用两个Syncfusion日期选择器来显示“创建日期”和“修改日期”。 当我将临时驱动的方法与“ [(ngModel)]”一起使用时,控件可以使用完全相同的数据正常工作。

当我在反应形式中使用同一控件时,同一页面上的相同控件不起作用。它只是在控制台上给我一个错误(value.match不是一个函数),只显示两个文本框,而不是通常的日期控件。如您在HTML文件中所看到的,我将学校对象转换为JSON,并同时看到了日期数字的值。我也没有看到任何不兼容之处。

.HTML文件

<form [formGroup]="registerForm" (ngSubmit)="onSubmit()" class="pt-2">
        <div class="row">
          <div class="col-10">
            <div class="form-group">
              <div class="row">
                <div class="col-4">
                  <span>Created date</span>
                </div>
                <div class="col-6">
                  <!-- This is doesn't work -->
                  <ejs-datepicker #createdDate class="syncfusion-dtp" placeholder='Enter date' format="dd-MM-yyyyy" aria-label="Created date"
                                  [readonly]="true" [disabled]="true"
                                  formControlName="createdOn" name="Created On"></ejs-datepicker>
                </div>
              </div>
            </div>
          </div>
        </div>

        <button type="submit" class="float-right ml-1 btn btn-info " [disabled]="!registerForm.valid">Submit</button>
      </form>

      <!-- This works -->
      <ejs-datepicker class="syncfusion-dtp" placeholder='Enter date' format="dd-MM-yyyyy" aria-label="Modified date"
                      [readonly]="true" [disabled]="true"
                      [(ngModel)]="school.modifiedOn" name="Modified On"></ejs-datepicker>

.ts文件

export class ListItemViewEditComponent implements OnInit, OnChanges {
  @Output() notifyParentOnUpdate: EventEmitter<any> = new EventEmitter<any>();
  @Input() schoolObject: School;
  school = new School();
  schoolNumber: number;
  @ViewChild('createdDate') createdDate: DatePicker;
  @ViewChild('modifiedDate') modifiedDate: DatePicker;

  constructor(private fb: FormBuilder, private route: ActivatedRoute, private schoolsService: SchoolsService) { }

  registerForm = this.fb.group({
    id: [''],
    schoolNumber: ['', Validators.required],
    schoolName: [''],
    description: [''],
    createdOn: [''],
    createdBy: [''],
    modifiedOn: [''],
    modifiedBy: ['']
  });


  ngOnChanges() {
    this.school = this.schoolObject;
    this.registerForm.setValue({
      id: [this.school.id],
      schoolNumber: [this.school.schoolNumber],
      schoolName: [this.school.schoolName],
      description: [this.school.description],
      createdOn: [this.school.createdOn],
      createdBy: [this.school.createdBy],
      modifiedOn: [this.school.modifiedOn],
      modifiedBy: [this.school.modifiedBy]
    });
  }
}

如果我有任何遗漏,请告诉我。

2 个答案:

答案 0 :(得分:0)

您可以检查几件事,

  • 在app.module.ts中,确保您已导入ReactiveFormsModule
  • 在组件类中,已声明registerForm并将类型设置为FormGroup(不是必需的,但请遵循良好的做法)
  • registerForm中移动ngOnInit声明(非常第一行)

我为您创建了一个StackBlitz示例-https://stackblitz.com/edit/angular7-synfunction-datepicker

在示例中,我设置了[disabled]=false[readonly]=false。因此,我可以看到实际的日期选择器弹出窗口。

如果您正在努力设置日期选择器的值。创建一个函数并在函数内部设置值,然后从某个地方调用它。 (即NgOnInit,NgOnChange)

希望这会有所帮助。

干杯。

答案 1 :(得分:0)

我猜想这个问题的可能原因必须与字符串解析有关。错误“ value.match不是函数”必须是因为value的类型不是字符串,因为match是属于String原型的方法。因此,请确保您的应用程序中是否存在类型不匹配的错误。

为便于参考,我使用Angular Reactive表单准备了带有Syncfusion Datepicker的示例。

https://stackblitz.com/edit/angular-eix8bh-z25gns?file=reactiveform.component.ts

如果这没有帮助,您可以通过以下链接与Syncfusion支持中心联系。

https://www.syncfusion.com/support/directtrac/incidents