Javascript Angular4路由器在使用Google登录回调中的`router.navigate()`后中断

Javascript Angular4路由器在使用Google登录回调中的`router.navigate()`后中断,javascript,angular,google-signin,angular-routing,Javascript,Angular,Google Signin,Angular Routing,我需要在Angular4应用程序中实现Google登录,但在使用Google登录回调中的router.navigate()后,我遇到了奇怪的路由问题 我建立了一个问题的例子,注释和复制步骤在第一页 我还使用部署的代码设置了回购协议,路由中断的示例在angular-4-google-signin分支中,路由正常使用Angular2的示例在angular-2-google-signin分支中。您可以看到,在相同的操作序列之后,Angular2版本路由正常工作 我需要了解是Angular的问题还是我没

我需要在Angular4应用程序中实现Google登录,但在使用Google登录回调中的
router.navigate()
后,我遇到了奇怪的路由问题

我建立了一个问题的例子,注释和复制步骤在第一页

我还使用部署的代码设置了回购协议,路由中断的示例在
angular-4-google-signin
分支中,路由正常使用Angular2的示例在
angular-2-google-signin
分支中。您可以看到,在相同的操作序列之后,Angular2版本路由正常工作


我需要了解是Angular的问题还是我没有正确使用它的路由器的问题。如果我没有正确使用路由器,请告诉我如何修复它。

我已经从GitHub(两个分支)下载了您的代码。 我运行了
npm安装
,然后运行了
ng服务
,它就像一个魔咒。 我已经安装了运行的
npmv5.3.0
节点v6.10.3
。所以我猜要么你上传了错误的代码,要么你的设置有问题

我建议您下载自己的代码,并在将node和npm更新到最新版本后检查此代码

对于v4版本,我在运行
npm install
时遇到了一个错误。我已删除以下部分:

  "engines": {
    "node": "6.11.1",
    "npm": "3.10.9"
  },

package.json
文件,然后按预期安装、提供服务和功能。因此,我再次怀疑node/npm问题。

我也有与您相同的问题。看来有一个‘变’角没有找到。您可以尝试在zone.run回调中运行代码

我更改了代码,如下所示:

更改前:

this._router.navigate(['dashboard'])
更改后:

this._zone.run(
    () => this._router.navigate(['dashboard'])
);

现在它可以工作了

您在这两个版本中使用的代码完全相同吗?@ronenmiller,是的,所有与路由器相关的逻辑都是相同的,我首先实现了Angular4版本,然后签出到Angular2分支,只更改了dependenciesTry,在signin's then块之后添加一个catch,看看是否有错误。如果是,请粘贴它here@ronenmiller,我得到了
这个.auth2.signIn(…).then(…).catch不是一个函数,添加它后,它看起来像是从GoogleAuth返回的承诺。signIn()没有
.catch()
方法,错误只能在传递给
的第二个回调函数中捕获。then()
@ronenmiller,在
之前添加
.catch()
块。然后()
提供相同的结果,没有
。catch()
方法您从branch
angular-4-google-signin
上传的,对吗?我在repo中看到默认选择的分支
angular-2-google-Sign
branch,所以只需检查一下,正如我在问题中提到的,Angular2版本可以正常工作,但Angular4在谷歌签名后中断,谷歌签名将重新运行,编辑我的答案以显示我所做的更改。