Angular 启动-p-日历组件验证问题

Angular 启动-p-日历组件验证问题,angular,primeng,primeng-calendar,Angular,Primeng,Primeng Calendar,我编写了一个自定义表单控件,它实际上是p-calendar组件的包装器。组件定义如下所示(注意:-我删除了一些代码以使其变得简单) 导出类MyDatePickerComponent实现ControlValueAccessor、OnInit、OnChanges{ @Input()_myDate:Date; @Input()控件:FormControl; @Input()日期格式:字符串; @Output()myDateChange:EventEmitter=新的EventEmitter(); 传播

我编写了一个自定义表单控件,它实际上是
p-calendar
组件的包装器。组件定义如下所示(注意:-我删除了一些代码以使其变得简单)

导出类MyDatePickerComponent实现ControlValueAccessor、OnInit、OnChanges{
@Input()_myDate:Date;
@Input()控件:FormControl;
@Input()日期格式:字符串;
@Output()myDateChange:EventEmitter=新的EventEmitter();
传播更改:any=()=>{};
验证EFN:任何;
获取myDate(){
将此返回。\u myDate;
}
设置myDate(val){
这个。_myDate=val;
此.更改(此.\u myDate);
}
构造函数(){}
//OnInit实现
恩戈尼尼特(){
this.validateFn=(c:FormControl)=>{
如果(c.value==null){
返回null;
}
让dateErr={invalidDate:{valid:false};
让userDate=moment(c.value,dateFormat,true);
返回userDate.isValid()?null:dateErr;
};
}
//ControlValueAccessor实现
writeValue(obj:any):void{
this.myDate=obj;
}
注册变更(fn:任何):无效{
这一变化=fn;
}
注册表(fn:any):void{}
验证(c:FormControl){
返回此。validateFn(c);
}
}
自定义组件的模板为:

<div class="form-group">
  <div class="col-md-2  col-sm-12  col-xs-12">
    <label class="control-label">Some date caption</label>
  </div>
  <div class="col-md-10  col-sm-12  col-xs-12">
    <p-calendar [(ngModel)]="tbDate" [dateFormat]="dateFormat" [showIcon]="true" readonlyInput="false"
      (ngModelChange)="tbDateChange.emit($event)">
    </p-calendar>    
  </div>  
</div>

一些日期说明
现在,当用户在日期文本框中手动输入错误的日期值时,将调用验证器,但validateFn中的c.value属性包含null

最终结果是,如果文本框为空或包含无效日期,则我的验证器无法工作,因为该值始终为空

是否有方法获取用户手动输入的值以执行验证和显示验证错误


注意:-我正在使用Priming 1.0.0-RC3

为什么不使用readonlyInput并强制用户从日历中选择正确的日期?事实上,
readonlyInput
是在我的实际组件中动态设置的。在上面的示例代码中,我将其值硬编码为
false
。因此,该组件还必须处理手动输入。
<div class="form-group">
  <div class="col-md-2  col-sm-12  col-xs-12">
    <label class="control-label">Some date caption</label>
  </div>
  <div class="col-md-10  col-sm-12  col-xs-12">
    <p-calendar [(ngModel)]="tbDate" [dateFormat]="dateFormat" [showIcon]="true" readonlyInput="false"
      (ngModelChange)="tbDateChange.emit($event)">
    </p-calendar>    
  </div>  
</div>