我正在使用Angular 7,并且有一个组件使用了只读属性来返回值。
当我在* ngFor绑定中使用此属性时,发生了递归调用。
组件代码为:
import { Component,OnInit,OnDestroy } from '@angular/core';
import { DialogBox } from './dialog-box';
import { getOrCreateValue,setvalue,getvalue } from '@app/helpers/data.store';
import { DialogService } from '@app/core/services';
import { Subscription } from 'rxjs';
@Component({
selector: 'sa-dialog-container',templateUrl: './dialog-container.component.html',styleUrls: ['./dialog-container.component.css']
})
export class DialogContainer implements OnInit,OnDestroy {
activeDialog: DialogBox;
constructor(dialogService: DialogService) {
const subscription = dialogService.dialog.subscribe(options => {
if (options) {
const dialog = new DialogBox(this,options);
this.dialogs.push(dialog);
this.activeDialog = dialog;
}
});
setvalue<any,string>(this,"subscription",subscription);
}
get dialogs(): DialogBox[] {
return getOrCreateValue(this,"dialogs",() => []);
}
get minimizedDialogs(): DialogBox[] {
return this.dialogs.filter(d => d.minimized).reverse();
}
get maximizedDialogs(): DialogBox[] {
return this.dialogs.filter(d => !d.minimized);
}
ngOnInit() {
}
ngOnDestroy(): void {
const subscription: Subscription = getvalue<any,"subscription");
subscription.unsubscribe();
}
}
模板代码为:
<div class="dialog-base">
<ng-container *ngFor="let dialog of minimizedDialogs">
<div class="min-dialog" (click)="dialog.restore()">{{dialog.title}}</div>
</ng-container>
</div>
控制台的屏幕截图:
更改跟踪器似乎可以递归检测。