Angular 2:在应用程序启动时重定向到页面

Posted

技术标签:

【中文标题】Angular 2:在应用程序启动时重定向到页面【英文标题】:Angular 2 : Redirect to a page at application startup 【发布时间】:2016-08-10 10:55:23 【问题描述】:

我在 Angular 2 中的 Web 应用程序遇到了一个小问题。

每次应用程序启动,我都会检查用户是否有访问权限。 但是我不知道如何将用户重定向到使这个过程无论他在哪里的路线。

有什么想法吗?

提前致谢!

【问题讨论】:

【参考方案1】:

常用的方法有两种

使用CanActivate

使用自定义RouterOutlet

检查用户是否通过身份验证,否则重定向到登录路径

另见 - Check if the user logged in on any page change in Angular 2 - http://www.captaincodeman.com/2016/03/31/angular2-route-security/

【讨论】:

似乎 angular 不能轻松处理重定向。很多努力只是为了强制我的应用程序的第一页...我会尝试这两种方法,谢谢!【参考方案2】:

您可以实现OnInit 接口并在ngOnInit 方法中添加重定向/检查并将@CanActivate 添加到您的子组件:

class Static
   static authenticated:boolean = false;
   static initialized:boolean = false;


@CanActivate(()=>
   if(Static.authenticated && Static.initialized)
      return true;
   
   return false;
)

protected ngOnInit():any

    this.loginFacade.refresh().subscribe(event=>
    
        var url = event.success ? this.location.path() : Routes.LOGIN;

        Static.authenticated = event.success;

        this.router.recognize(url).then(()=>
        
            return Promise.resolve(url);
        , (e)=>
        
            return Promise.resolve(Routes.LOGIN);
        ).then((url)=>
        
            Static.initialized = true;
            return this.router.navigateByUrl(url);
        );
    );

同时删除默认路由。

【讨论】:

OnInit 被调用,但我不能在我的主类中使用路由器......我有错误“无法读取未定义的属性'构造函数'”。感谢您的回答 我在 Bootstrap 调用的班级 App 中尝试了您的解决方案。看来我们无法在此类中进行重定向

以上是关于Angular 2:在应用程序启动时重定向到页面的主要内容,如果未能解决你的问题,请参考以下文章

Sentry 捕获错误时重定向到新页面

容器在启动时重定向日志文件的方法

Spring Security 在新的应用程序启动时重定向到 invalid-session-url

RouterBrowser 不会在刷新时重定向到默认页面

使用 jQuery 使用 RESTful API 时重定向到另一个 html 页面

React.js身份验证在每次刷新时重定向到登录名