在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]
});
}
}
如果我有任何遗漏,请告诉我。
答案 0 :(得分:0)
您可以检查几件事,
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支持中心联系。