InAppBrowser侦听器引发“导航在Angular区域之外触发,您是否忘记了调用ngZone.run()?”

时间:2019-09-08 05:17:01

标签: angular ionic-framework

我正在Ionic框架上执行登录页面,我首先需要知道该用户是否存在于我的数据库中,其次要知道该用户是否具有来自webex api的访问令牌,那么问题就出在该用户没有访问令牌时我必须显示来自webex服务的webview,然后用户必须进行登录,并且我必须捕获由webex生成的代码,然后通过api获取accesstoken,之后,我必须将用户重定向到另一个页面。

用户登录webex后,我已经能够获取访问令牌,问题是当我尝试导航至成功路线时,得到:

  

“导航在Angular区域之外触发,您是否忘了调用'ngZone.run()'?”

使用此功能,我可以从webex网址获取代码:

getWebexAccess( response: any ){
    this.showLoading = false;
    if(response.data.hasOwnProperty("URL")){ 
      let browserRef = this.inAppBrowser.create(response.data.URL, '_blank', 'location=no');
      browserRef.on("loadstop").subscribe((event)=>{
        if ((event.url).indexOf('?code=') !== -1) {
          try{
            let urlCode = event.url.slice(event.url.indexOf('?code=') + '?code='.length);
            let chunkCode = urlCode.split("&");
            let code = chunkCode[0] + '&email=' + this.user.email + '&' + chunkCode[1];
            this.getAccessToken( code );
            browserRef.close();
          }catch( error ){
            console.log( error );
          }
        }
      })
    }
  }

之后,我调用getAccessToken

getAccessToken( code: string ){
    this.apiChat.getAccessToken( code ).subscribe( (response: any) => {
      if(response.status === 200){
        this.ngZone.run(() => this.router.navigate(["/chat"])).then();
      }
    }, (errorResponse: any) => {
      console.log( errorResponse );
    });
  }

如果我将代码保留为this.ngZone.run(),则控制台将返回错误,但是如果我将代码保留为this.ngZone.run(),则控制台将不会显示错误,但导航不会要么工作

这是我的问题,登录成功后我无法导航到聊天页面。非常感谢您的帮助。

0 个答案:

没有答案