Подписка на изменения в новом маршрутизаторе Angular 2 (›=rc1)

Для аутентификации моего приложения Angular 2 я подписался на свой маршрутизатор при инициализации приложения. Я проверяю, установлен ли пользователь, если нет, я пытаюсь получить пользователя из моей службы входа в систему, если это также невозможно, я хочу перейти на страницу входа.

ngOnInit() {
    this._router.changes.subscribe(
        next => {
            // First check if our component has a user set
            if (this.loggedInUser === undefined) {
                // It doesn't, let's set this user with help from our loginService
                this.loggedInUser = this._loginService.getUser();

------->        I think that this is where I need to add a line like: 
       if the user now is logged in, finish the change that triggered this code.

                // If user stil isn't set, we need to login
                if (this.loggedInUser === undefined) {
                    // Check if the user isn't already at the login page
                    if (!(this._router.urlTree.contains(this._router.createUrlTree(['login'])))) {
                        console.log('Not authorised, redirected to login.');
                        this._router.navigate(['login']);
                    }
                }
            }
        }
    );
}

Проблема с этим решением заключается в том, что жесткие ссылки в моем приложении больше не работают.

Например: если я перехожу на localhost:8000/user/1, мое приложение инициализируется, и мое приложение получает пользователя из моего loginService. Однако он не переходит по ссылке, которую я ввел, я могу перейти к этому пользователю через меню. Я предполагаю, что мне нужно добавить строку, которая сообщает маршрутизатору, что он должен выполнить следующее действие? Возможно ли это с этой конструкцией?

Изменить: я надеюсь, что с этим объяснением проблема станет яснее: если я перейду к определенному URL-адресу, например http://aplication/users/5, срабатывает приведенный выше фрагмент кода. В большинстве случаев пользователь уже вошел в систему, и учетные данные извлекаются из службы входа в систему. Как я могу сказать маршрутизатору, что он должен просто завершить действие изменения, которое вызвало код?


person hY8vVpf3tyR57Xib    schedule 30.05.2016    source источник
comment
Мне непонятно, в чем проблема.   -  person Günter Zöchbauer    schedule 30.05.2016


Ответы (1)


Я бы сказал, что просто return; должен делать то, что вы хотите. «Изменение, вызвавшее этот код», в любом случае завершено уже в этот момент. Если вы явно не переходите на другой путь, это должен быть именно тот результат, который вы запрашиваете.

person Günter Zöchbauer    schedule 30.05.2016