我有一个组件,用于计算" afterViewChecked" lifeCycle,所以我需要使用setTimeout - 要应用更改,否则我会收到错误。 (Angular 4 Changes based on view)
我刚发现setTimeout,无论我的应用程序在哪里导致量角器抛出超时消息。 - 说
失败:等待异步角度任务完成等待.......这可能是因为当前页面不是角度应用程序",
我该怎么办? - 有时你只需要使用setTimeout ...
答案 0 :(得分:0)
检测DOM更改的另一种方法是通过MutationObserver。在构造函数中实例化该类,您可以在其中定义对更改执行的操作,然后在ngAfterViewInit()
中进行观察。当您运行所需的计算功能时,您可以停止观察,以便在发生进一步更改时该功能不会继续触发。
import { Component, AfterViewInit } from '@angular/core';
@Component({
selector: 'app-test',
template: `<div #element></div>`
})
export class TestComponent implements AfterViewInit {
@ContentChild('element') element : ElementRef;
this.observer: MutationObserver;
constructor() {
this.observer = new MutationObserver(mutations => {
this.testFunction();
});
}
ngAfterViewInit() {
this.observer.observe(this.element.nativeElement, { attributes: true, childList: true, characterData: true });
}
testFunction() {
this.observer.disconnect(); // We no longer want to observe
alert('Test!');
}
}
答案 1 :(得分:0)
你需要用$ interval替换$ timeout,它会起作用。 “如果您的页面使用$ timeout进行轮询,Protractor将无法判断您的页面何时准备就绪。请考虑使用$ interval而不是$ timeout。”
他们的官方文件:http://www.protractortest.org/#/system-setup https://github.com/marcorinck/angular-growl/issues/43