2016-11-07 3 views
0

Я обнаружил, что моя подписка на Angular2 срабатывает только при загрузке страницы. Когда я установил routerLink, а затем на мой home.component функция checkUser() не запускается.Angular2 с использованием подписки с изменением маршрута

Например, я установил routerLink на отдельную страницу (около). Если на моей странице я установил routerLink на свою домашнюю страницу, моя функция checkUser() от home.component не работает.

Каков наилучший способ заставить мои подписки работать с этими изменениями маршрута?

Мой home.component

export class HomeComponent implements OnInit { 
private username$: FirebaseObjectObservable<string>; 
private dashlink: boolean; 
private logsub: Subscription; 
    constructor(private mainService: MainService){ 
    } 

    checkUser(){ 
     this.logsub = this.mainService.userThere$.subscribe(isUser => { 
      if (isUser){ 
       alert("Yes"); 
      } 
     }); 
    } 

    ngOnInit(){ 
    this.checkUser(); 
    } 

} 
+1

То, что вы описали, звучит правильно. ngOnInit следует вызывать каждый раз при ударе маршрута. Возможно, связано с https://github.com/angular/angular/issues/8012 – Fiddles

ответ

1

Как правило, вы можете поместить любой код, необходимый для инициализации в constructor на каждом class (класс компонента).

Для вашего случая вы хотите поместить код пользователя в поле constructor, он будет называться каждый раз, когда HomeComponent соответствует целевому маршруту.

export class HomeComponent implements OnInit { 
    private username$: FirebaseObjectObservable<string>; 
    private dashlink: boolean; 
    private logsub: Subscription; 

    constructor(private mainService: MainService){ 
     // moving checkUser code inside constructor 
     this.logsub = this.mainService.userThere$.subscribe(isUser => { 
      if (isUser){ 
       alert("Yes"); 
      } 
     }); 
    } 
} 
Смежные вопросы