首页 文章

angular 2:queryParams onInit

提问于
浏览
0

我目前在使用ActivatedRoute的queryParams时遇到了一些问题 . 我正在尝试实现一个系统,您可以使用queryParams =“?token = 1234”调用任何URL . 如果提供此参数,AppComponent将使用此标记对用户进行身份验证 .

这样做的原因是用户将在不同的应用程序中进行身份验证,该应用程序将接收令牌并将其转发给角度应用程序 .

所以,在我的AppComponent中,我有以下代码:

ngOnInit() {

    this._route.queryParams.subscribe(queryParams => {
        if (queryParams['token'] != null) {
            let data;
            this._staffService.getStaffFromToken(queryParams['token']).subscribe(
                (response: any) => data = response,
                (error: Error) => console.error(error),
                () => {
                    if (data.token != null) {
                        this._staffService.setLoggedInStaff(data.staff);
                        this.processLogin();
                    } else {
                        this._router.navigateByUrl('/login');
                    }
                }
            );
        } else {
            if (this._staffService.getLoggedInStaff() != null) {
                this.processLogin();
            } else {
                this._router.navigateByUrl('/login');
            }
        }
    });
}

我完全理解能够订阅这些参数的想法,因为它是SPA,并且使用该应用程序时params可能会改变 .

但是,当我转到以下网址时:http://localhost:4200?token=1234它会立即导航到/ login . 出于某种原因,当调用ngOnInit时,在我看来它并不是一个好的解决方案 .

有没有人有一些建议?我尝试了不同的东西,但我一直有这个问题 .

1 回答

  • 1

    尝试将您的代码放在 ngOnChanges() 并查看ng2 Lifecycle

相关问题