[英]Custom Formly Component not showing validation message on blur
我有一个自定义的 angular 日期选择器组件,它使用 ngb-datepicker 并实现控制值访问器。 现在,我从中创建一个表单组件以用于我的 json 表单。 这工作正常,但当用户单击控件并单击离开时它不显示验证消息。 即使触摸了控件,它也不会受到影响。 就像没有触发模糊一样。 我在这里缺少什么?
自定义日期选择器控件
import { Component, forwardRef, Input } from '@angular/core';
import {
ControlValueAccessor,
FormControl,
NG_VALUE_ACCESSOR,
} from '@angular/forms';
@Component({
selector: 'custom-date-picker',
template: `
<div class="input-group">
<input
class="form-control"
placeholder="yyyy-mm-dd"
name="dp"
[formControl]="myControl"
ngbDatepicker
#d="ngbDatepicker"
(keyup)="change($event)"
(dateSelect)="change($event)"
/>
<button
class="btn btn-outline-secondary bi bi-calendar3"
(click)="d.toggle()"
type="button"
></button>
</div>
`,
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => NgbdDatepickerPopup),
multi: true,
},
],
})
export class NgbdDatepickerPopup implements ControlValueAccessor {
myControl = new FormControl();
model = '';
private _onChange = (value: unknown) => {};
private _onTouch = (value: unknown) => {};
writeValue(obj: any): void {
this.myControl.setValue(obj);
}
registerOnChange(fn: any): void {
this._onChange = fn;
}
registerOnTouched(fn: any): void {
this._onTouch = fn;
}
change(event: unknown) {
if (event instanceof Event) {
const date = (event.target as HTMLInputElement).value;
this._onChange(date);
this._onTouch(date);
}
}
}
正式组成
import { Component } from '@angular/core';
import { FieldType } from '@ngx-formly/core';
@Component({
selector: 'formly-field-input',
template: `
<custom-date-picker [formControl]="formControl" [formlyAttributes]="field"></custom-date-picker>
<div class="invalid-feedback" style="display: block;">
<formly-validation-message *ngIf="showError" [field]="field"></formly-validation-message>
</div>
`,
})
export class FormlyFieldInput extends FieldType {}
我设法通过公开 _onTouch 并更新custom-date-picker
的模板以绑定到模糊事件 (blur)="_onTouch($event)" 来解决此问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.