什么是脱水检测器?我如何在这里使用?

Fis*_*isu 13 angular

当元素处于活动状态时,我正在使用一个简单的指令来聚焦文本输入*ngIf.这包含在一个*ngFor循环中.

当第一个*ngIf激活时,输入按预期聚焦.当另一个输入被激活时,我收到错误:

EXCEPTION: Attempt to use a dehydrated detector.

我不明白这意味着什么以及如何防止错误.即使出现错误,该功能仍然有效.

@Directive({
    selector: '[myAutoFocus]'
})
export class AutoFocusDirective {
    constructor(private elem: ElementRef) {
        window.setTimeout(function() {
            elem.nativeElement.querySelector('input').focus();
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

```

Tom*_*las 13

脱水检测器是一个已从更改检测系统中删除的组件,通常是因为它已通过DOM *ngIf或其他方式从DOM卸载:如果应用程序中存在异步操作,则会触发此已卸载的检测器,则会引发错误:解决方案是使用[hidden]而不是*ngIf在受影响的组件上使用,或者将违规操作推迟到下一个ticksetTimeout( () => this.offendingAction(), 0)