@angular/router 3.0.0-alpha.3: Как перенести OnActivate

Я только что обновил @ angular/router до 3.0.0-alpha.3. Однако я не могу найти интерфейс OnActivate, доступный в 2.0.0-rc.1. Любые намеки приветствуются.

Ответ 1

Я лично не убежден, что CanActivate и Deactivate охранники - это лучшие места для миграции логики OnActivation, которая не является защитой какого-либо рода.

Возможно, новые события маршрутизатора - лучший вариант: Как использовать NavigationStart

Ответ 2

Так как у нас еще нет документации и она появится в ближайшие недели. Вы хотели намек. Вот что я нашел для вас. Похоже, вам нужно передать дополнительный параметр и указать класс для обработки крючков жизненного цикла?

import { CrisisDetailComponent } from './crisis-detail.component';
import { CrisisListComponent }   from './crisis-list.component';
import { CrisisCenterComponent } from './crisis-center.component';
import { CrisisDetailGuard }     from './crisis-detail.guard';

export const CrisisCenterRoutes = [
  {
    path: '/crisis-center',
    component: CrisisCenterComponent,
    index: true,
    children: [
      { path: '', component: CrisisListComponent },
      { path: ':id', component: CrisisDetailComponent, canDeactivate: [CrisisDetailGuard] }
    ]
  }
];

а затем CrisisDetailGuard выглядит так:

import { Injectable }    from '@angular/core';
import { CanDeactivate } from '@angular/router';
import { Observable }    from 'rxjs/Observable';

import { CrisisDetailComponent } from './crisis-detail.component';

@Injectable()
export class CrisisDetailGuard implements CanDeactivate<CrisisDetailComponent> {

  canDeactivate(component: CrisisDetailComponent): Observable<boolean> | boolean {
    return component.canDeactivate();
  }
}

Я предполагаю, что вы можете сделать то же самое с крюком canActivate lifecycle. Также это похоже на решение обойти наш DI в наших крючках жизненного цикла. Таким образом, похоже, что мы не используем Брендон Робертс DI hack:)

Взгляните на этот глубокий обзор новой маршрутизации, над которой они работали Виктор Савкин: http://victorsavkin.com/post/145672529346/angular-router

ИСТОЧНИК (plnkr из статьи.. в настоящее время устарел): http://plnkr.co/edit/ER0tf8fpGHZiuVWB7Q07?p=preview

EDIT: добавлен выделенный код для соответствия router.rc3