コンポーネントがブートストラップのモーダル ダイアログで表示されると、1 秒あたり数回再レンダリングされ続けます。(ブラウザの開発者ツールで確認できます)。
コンポーネントは次のようになります。
@Component({
selector: 'app-takeover',
encapsulation: ViewEncapsulation.None,
changeDetection: ChangeDetectionStrategy.OnPush,
template: `
<iframe #iframe
[src]="sanitizer.bypassSecurityTrustResourceUrl(takeover.IframeUrl)"
sandbox="allow-same-origin"
(load)="iframe_load($event)">
</iframe>
`,
})
export class TakeoverComponent {
constructor(
public sanitizer: DomSanitizer
) { }
takeover: Takeover;
@ViewChild('iframe') iframeRef: ElementRef<HTMLIFrameElement>;
iframe_load(event) { }
}
そして、私はそれを次のように示します:
let modalRef = this.modalService.open(TakeoverComponent);
let component = modalRef.componentInstance as TakeoverComponent;
component.takeover = takeover;
テンプレートから (load)="iframe_load($event)" を削除すると、期待どおりに一度だけレンダリングされます。
DOM を再レンダリングし続けるのはなぜですか? また、そうしないようにするにはどうすればよいですか?
"@angular/core": "~7.2.0", "@ng-bootstrap/ng-bootstrap": "^4.2.1", "zone.js": "~0.8.26"