从回调重定向到路由器后,Angular2组件没有类引用

时间:2016-09-25 15:17:35

标签: redirect angular router

您好我已经设置了这个plunkr来证明我的问题。 https://plnkr.co/edit/tO4xbD15A3FvjpaGw6J5?p=preview

这是在成功登录后执行重定向的代码的主要部分。我不能引用“isLoggedIn”变量,因为它在回调函数中......

loginLaunch() {
console.log("authentication.ts:loginLaunch()");
let authProperties = AUTH_PROPERTIES; 
authProperties.immediate = false;
// Sign the user in, and then retrieve their ID.
let ga = gapi.auth2.getAuthInstance();
let router = this.router;
let redirect2 = this.redirectUrl;
ga.signIn(authProperties).then(function() {
    console.log("authentication.ts:loginLaunch() - logged on:"+ ga.currentUser.get().getId());
    //this.isLoggedIn=true;
    // Redirect the user
    console.log("authentication.ts:loginLaunch() - logged in now, redirect to "+redirect2);
    router.navigate([redirect2]);
}); 
}

该示例使用文件“app / authentication.ts”,我有两个版本: “app / authentication.ts.works”和a “应用程序/ authentication.ts.worksNot”

第一个是虚拟身份验证(并不是真的要求您输入密码),第二个是使用Google身份验证。

我遇到的问题是这个。使用google身份验证(使用promise / callback),重定向后的Angular2组件没有对组件类的引用。在这种情况下,它应该在用户登录后显示“标签”的详细信息。但事实并非如此。你知道这里发生了什么吗?

如果将“app / authentication.ts.works”的内容复制到“app / authentication.ts”,则应用程序将按预期工作:登录后,组件1页面上会显示标签信息。

感谢任何帮助。

赫尔穆特

2 个答案:

答案 0 :(得分:0)

不要使用try { Process procRDC = Process.Start(rdcSupport, "/v:support_server1"); } catch { Console.WriteLine("Failed to open..."); } ,因为这会导致function ()指向函数而不是类。

使用保留this

范围的箭头函数() =>
this

您的代码有ga.signIn(authProperties).then(() => { 的多种用法。我建议你全部替换它们,除非function ()的行为是预期的(极少数情况下)。

答案 1 :(得分:0)

我找出了问题所在(更新了plunkr示例)。而不是从" authenticate.ts"中调用router.navigate。直接,我不得不使用" zone.run()"确保当前区域在不相关的子组件中发生变化(我的猜测是......):

    this.zone.run(()=>{
        router.navigate([redirect2])
    });