2017-02-20 4 views
-1

У меня есть этот код:Угловая получить текущий маршрут определяется, чем неопределенная

import { Router } from '@angular/router'; 

Тогда:

constructor(router: Router) { 
    console.log(this.router.url); 
} 

Когда я загрузить страницу, он будет первым сказать мне URL является «/»

Unhandled Promise rejection: Error in ./BaPageTop class BaPageTop - inline template:22:4 caused by: Cannot read property 'url' of undefined ; 

Я хочу, чтобы проверить, если текущий URL равно /login, а в противном случае перенаправления "/login" в конструктор. Я пробовал делать это с помощью window.location.href, но это не работает, потому что URL-адрес не меняется, возможно?

+1

Вопросов, ищущих отладка помощи («? почему не этот код работает») должны включать в себя желаемое поведение, конкретную проблему или ошибку и короткий код, необходимый для воспроизведения его в вопросе сам. Вопросы без четкого описания проблемы не полезны другим читателям. См.: Как создать минимальный, полный и проверенный пример. –

+0

Вам необходимо использовать 'router.events.subscribe (...)' и прочитать URL ** после ** первой навигации. –

+0

Okey, я изменю вопрос – Arnold

ответ

1

На основании вашего кода конструктора вы никогда не устанавливали this.router на все, поэтому он всегда будет undefined. По умолчанию, когда вы передаете параметр в конструктор, он НЕ становится свойством this. Вы должны изменить свой код:

constructor(router: Router) { 
    console.log(router.url); 
} 

В качестве альтернативы, если вы действительно хотите использовать this.router (например, если вы хотите использовать маршрутизатор других функций в одном классе), вы можете использовать public или private ключевые слова при объявлении параметра:

constructor(private router: Router) { 
    console.log(this.router.url); 
} 
Смежные вопросы