尝试设置最后一个活动的MatTab时,ExpressionChangedAfterItHaHasBeenCheckedError?

时间:2019-03-24 17:52:49

标签: angular angular-lifecycle-hooks

我有一个Auth组件。该组件使用mat-tab-group组件,该组件具有两个mat-tab组件,使您可以轻松地在登录和注册之间返回第四。登录在索引0(第一个显示的表单)上,注册在索引1(第二个显示的表单)上。当用户尝试使用已经存在的用户名进行注册时,后端的验证将失败,我希望将用户带回“注册”,而不是默认的用户名,即第一个用户,即“登录”。选项卡更改后,我将上次查看的选项卡存储在localStorage中。

我有一个onTabChange事件处理程序

`onTabChange(event: MatTabChangeEvent){
    console.log("Change tab event: ", event);
    if(event.tab.textLabel.toLocaleLowerCase() == "sign up"){
      localStorage.setItem("selectedTab", event.index.toString());
      window.history.replaceState({}, '', '/signup')     
      console.log(this.tabs);
    }
    if(event.tab.textLabel.toLocaleLowerCase() == 'login'){      
      localStorage.setItem("selectedTab", event.index.toString());
      window.history.replaceState({}, '', '/login')      
    }
  }`

我把这段代码放在哪里都没关系:

`const activeTabIndex = parseInt(localStorage.getItem('selectedTab'));
    this.selected.setValue(activeTabIndex);`

我总是收到ExpressionChangedAfterItHaHasBeenCheckedError。但这真的让我感到困惑,因为我的代码在构造函数中?

我尝试添加ChangeDetectorRef并在detectChanges();生命周期挂钩中添加了ngAfterContentInit行,但是相同的错误不断出现。

0 个答案:

没有答案