使用 PrimeNG 日历检测 [(ngmodel) 对所选日期的更改

Detect [(ngmodel) change to selected date with PrimeNG calendar

我有一个带有使用 PrimeNG 日历创建的附加日期选择器的输入元素。

HTML 部分

<p-calendar showAnim="slideDown" 
            id="calendar" 
            [showIcon]="true 
            [(ngModel)]="myDate" 
            (blur)="onBlurMethod($event)">
</p-calendar>

这里我使用了PrimeNG日历标签。 我使用了一个隐藏的文本框,所以我可以选择更新的值,但它反映在文本框中。如何捕获任何事件的更新值?

<input type="hidden" id = "datePickerText" [ngModel]="myDate">

当用户通过直接在输入元素中键入来更改日期时,我可以使用输入元素的模糊事件获取值,如上所示。但是当用户从日期选择器更改日期(即通过单击日历上的日期)时,不会调用模糊处理程序。

如何检测通过 datepicker 而不是在输入元素中键入对所选日期所做的更改?

PrimeNG calendar 有两个事件可供您使用:onBluronSelect

所以您可能想更改代码以使用 onBlur 而不是 blur:

<p-calendar showAnim="slideDown" 
            id="calendar" 
            [showIcon]="true"
            [(ngModel)]="myDate" 
            (onBlur)="onBlurMethod($event)">
</p-calendar>

另一种方法是使用 getset 属性直接检测变化。

private _startDate: Date;

set startDate(date: Date)
{
    this._startDate = date;
    alert('changed');
}

get startDate(): Date
{
    return this._startDate;
}

无论您选择哪种方式,您都需要确保知道逻辑何时被触发 - 并且它不是 运行 不必要的。这种方式可能会变得很麻烦并且存在关注点分离问题,如果您必须因触发器而进行远程调用,则可能不建议这样做。

你可以使用 (ngModelChange)="yourMethod()".