ChangeDetectorRef包含事件。我得到了ViewDestroyed错误

时间:2018-04-10 19:53:38

标签: angular

我遇到了这个错误

  

ViewDestroyedError:尝试使用已销毁的视图:detectChanges

当我从事件中调用ChangeDetectorRef.DetectChanges()时。我已经被困了近2天了,我无法理解。

好的,我已经创建了一个小样本来演示正在发生的事情。我们有3个不同的模块。在被叫shared.module.ts时,其他两个人真的不重要,他们被称为crm.module.tsadmin.module.ts

这里重要的是,SharedModule在其提供者中有一个名为SidebarService的内容。 SidebarService看起来像:

@Injectable()
export class SidebarService {

    viewChanged:EventEmitter<any>=new EventEmitter<any>();

    //other properties and methods here

    viewClick(view:SidebarView):void{
        this.selectedView = view;
        this.viewChanged.emit(view);
    }
}

现在在另外两个模块中,我有一个订阅此事件的主要组件。类似的东西:

ngOnInit():void{
    this.sidebarService.selectedView = this.views[0];
    this.sidebarService.views = this.views;
    this.sidebarService.visible = true;


    this.sidebarService.viewChanged.subscribe(view=>{
        this.changeDetectorRef.detectChanges();
    });
}

好的,现在对有趣的事情......当我切换到另一个模块的主视图时,只有当我在该模块中切换子视图时才会抛出此错误。

我尝试了什么...... 我试过onDestroy()

  1. 取消订阅viewChanges事件
  2. 与changeDetector分离
  3. 分离然后取消订阅
  4. 取消订阅然后分离
  5. 这不起作用,我仍然收到错误。

    我创建了一个能够重新创建的plnkr.co但由于某种原因它没有保存。如果这里有人需要,我会再次这样做。

0 个答案:

没有答案