我有一个共同的组件[date-range-selector],在这个组件中,当更改日期值时,它会发出新的值
@Output() changeEvent = new EventEmitter();
//unimportant code
this.changeEvent.emit({ from: moment(from), to: moment(to) });
现在在我的应用程序上,我有一个[清除过滤器]按钮,该按钮将日期范围重置为默认值,但这导致该组件再次触发changeEvent.emit代码
如何禁用发射器,更改值然后重新启用发射器,或者我采用的是错误的方法?
我可以从父级中删除侦听器,然后动态地重新附加它吗?
这是我的过滤器栏中的组件
<so-date-selector class="date-selector"
#CreationDate
[from]="fromDate"
[to]="toDate"
[allowCalendar]="false"
[allowRange]="true"
placeholderText="Creation Date"
(changeEvent)="creationDateChange($event)"
>
<button mat-stroked-button (click)="resetFilters()" class="clear-filter">Clear Filters</button>
在so-date-selector内部,我有这个
<section *ngIf="allowRange">
<ngx-mat-drp (selectedDateRangeChanged)="updateRange($event)" [options]="options" #dateRangePicker></ngx-mat-drp>
</section>
updateRange调用emit函数,然后在我的父组件中
resetFilters() {
this._service.filtersInitialised = false;
this.sourceFilter.setValue("All Sources");
this.fromDate = moment(new Date()).subtract(14, 'days').startOf('day');
this.toDate = moment(new Date()).clone().endOf('day');
this._service.filtersInitialised = true;
}
然后在服务中
loadIssues() {
if (this.filtersInitialised) {
//do stuff
}
因此,当我检查this._service.filtersInitialised时,没有其他过滤器会触发该事件,但是日期选择器被触发了,我的猜测是因为它在重置了布尔值后便发出了
希望它变得更加清晰
updateRange(range: Range) {
this._emit(moment(range.fromDate), moment(range.toDate));
}
private _emit(from: moment.Moment, to: moment.Moment) {
if (this._isInitialised) {
this.changeEvent.emit({ from: moment(from), to: moment(to) });
}
}
所以我之前在上面是this._isInitialised && this.emitEnabled
带有elementEnabled的布尔输入()
然后在我的使用者中,我在重置日期值时设置了enableEnabled = false,然后再次启用了它,但是仍然触发了发射操作,因此我的想法是子控件在父控件后面稍稍运行,所以在到达发射控件时布尔值恢复为真的函数
[最终更新] 我认为答案很简单,因为没有意义,所以无法完成。这是我关于工作流程的基本思路
好吧,想象一下我们有3个组成部分 父母-孩子-警报
父母在听孩子在听闹钟
如果我将父母设置为不听孩子,则在闹钟上启动计时器,然后再次开始听孩子。警报响起时,孩子会通知父母,因为孩子再次在听。即使导致该行为的原因是在父母被设置为不听话的情况下发生的
所以我现实生活中的问题是由于某种原因,它很慢,并且在我再次开始收听后会通知我。