Ошибка машинописного текста Angular 2 при использовании функции подписки на новом маршрутизаторе (rc 1)

Я пытаюсь настроить аутентификацию для своего приложения Angular 2 с новым маршрутизатором. Кто-то предложил попробовать следующее:

constructor (private _router: Router) {} 

ngOnInit(){
  this._router.subscribe(
    next => {
      if (!userIsLoggedInOrWhatever) {
        this._router.navigate(['Login']);
      }
    }
  )    
}

Однако эта проблема заключается в том, что это приводит к ошибке машинописного текста.

(app.component.ts(47,22): ошибка TS2339: свойство «подписаться» не существует для типа «маршрутизатор».

Это странно, потому что документация ясно показывает, что объект Router имеет эту функцию. Я могу вызывать другие функции, такие как router.navigate(['/url']). Ребята, у вас есть идеи, в чем может быть проблема?


person hY8vVpf3tyR57Xib    schedule 10.05.2016    source источник


Ответы (1)


новый маршрутизатор

constructor(router:Router) {
  router.events.subscribe(event:Event => {
    if(event instanceof NavigationStart) {
    }
    // NavigationEnd
    // NavigationCancel
    // NavigationError
    // RoutesRecognized
  })
}

исходный

У класса Router есть EventEmitter changes, на которые вы можете подписаться:

ngOnInit(){
  this._router.changes.subscribe(
    next => {
      if (!userIsLoggedInOrWhatever) {
        this._router.navigate(['Login']);
      }
    }
  )    
}

Чтобы узнать, как получить предыдущий маршрут, см. изменение маршрута в Angular 2? (pairwise())

person Günter Zöchbauer    schedule 10.05.2016
comment
Не могли бы вы предложить пример того, как это сделать в app.ts, где также находится bootstrap(AppComponent, [...]? Я сталкиваюсь с рядом различных ошибок в моих различных попытках заставить это работать в моем app.ts: ИСКЛЮЧЕНИЕ: TypeError: Невозможно прочитать «изменения» свойства undefined, ИСКЛЮЧЕНИЕ: Нет поставщика для Router!, angular2-polyfills.min.js: 1 Отклонение необработанного обещания: ReferenceError: маршрутизатор не определен, angular2-polyfills.min .js: 1 Отклонение необработанного обещания: TypeError: невозможно прочитать «изменения» свойства неопределенного - person Benjamin McFerren; 22.05.2016
comment
Какую версию Angular2 вы используете? Код выше работает с RC.1 @angular/router, но не с @angular/router-deprecated - person Günter Zöchbauer; 23.05.2016
comment
хорошая работа, но как определить предыдущий маршрут, откуда приложение идет по какому маршруту? - person Pardeep Jain; 20.10.2016
comment
Здесь должен помочь оператор pairwise() изменение в angular 2"> stackoverflow.com/questions/33520043/ - person Günter Zöchbauer; 20.10.2016