Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
表达式ChangedTerrithasBeenCheckedError与Angular 6和redirect_Angular - Fatal编程技术网

表达式ChangedTerrithasBeenCheckedError与Angular 6和redirect

表达式ChangedTerrithasBeenCheckedError与Angular 6和redirect,angular,Angular,我可以看到有很多关于这个主题的帖子,但大部分都与异步服务调用有关。我有一个应用程序组件,负责登录Azure AD。当用户单击登录时,他们将重定向到Azure的登录页面,并重定向回名为AuthCallBack的组件。AuthCallBack将调用AppComponenet上的一个方法,该方法只设置一个名为userIsLoggedIn的布尔值,我在ngIf中使用它。我得到以下错误表达式ChangedTerithasBeenCheckedError。因为它不是某种http异步调用,所以我没有Subsc

我可以看到有很多关于这个主题的帖子,但大部分都与异步服务调用有关。我有一个应用程序组件,负责登录Azure AD。当用户单击登录时,他们将重定向到Azure的登录页面,并重定向回名为AuthCallBack的组件。AuthCallBack将调用AppComponenet上的一个方法,该方法只设置一个名为userIsLoggedIn的布尔值,我在ngIf中使用它。我得到以下错误表达式ChangedTerithasBeenCheckedError。因为它不是某种http异步调用,所以我没有Subscribe选项,该怎么办

<table>
  <tr>
    <td routerLink="/">Login page</td>
    <td routerLink="/dashboard">Dashboard</td>
    <td (click)="login()">Login</td>
    <td (click)="logout()">Logout</td>
    <td><span *ngIf="userIsLoggedIn">Logged in</span></td>

  </tr>
  <tr>
    <td colspan="5">
       <router-outlet></router-outlet>
    </td>
  </tr>
</table>
父组件(appComponent)已具有CD(更改检测)周期,而不是子组件更改父组件的状态。在开发模式下-另一张CD过来,检查上一个CD周期没有任何更改(将抛出错误)

我们有一个黑客:

-换行设置超时,更改将应用于新的CD周期

// AuthComponent
setTimeout(()=>this.appComponent.handleWindowCallback(), 0);
-在父组件中调用ChangeDetectorRef.检测更改

// AppComponent
constructor(private changeDetectorRef: ChangeDetectorRef){}

handleWindowCallback(){
  /* some code */
  this.changeDetectorRef.detectChanges();
}

谢谢,我会尽快测试的。为什么要暂停?不客气。但不要过度使用,因为我们会触发额外的CD周期,这会影响性能。
// AuthComponent
setTimeout(()=>this.appComponent.handleWindowCallback(), 0);
// AppComponent
constructor(private changeDetectorRef: ChangeDetectorRef){}

handleWindowCallback(){
  /* some code */
  this.changeDetectorRef.detectChanges();
}