Angular 2 - equivalent to router resolve data for new router

前端 未结 2 1447

I am playing with Angular 2.0\'s new router and I try to use something similar to Angular 1.X ui-router / ng-route resolve mechanism.

I was trying to a

相关标签:
2条回答
  • 2020-12-11 04:10

    update

    @Injectable()
    export class CrisisDetailResolve implements Resolve<Crisis> {
      constructor(private cs: CrisisService, private router: Router) {}
      resolve(route: ActivatedRouteSnapshot): Promise<Crisis>|boolean {
        let id = route.params['id'];
        return this.cs.getCrisis(id).then(crisis => {
          if (crisis) {
            return crisis;
          } else { // id not found
            this.router.navigate(['/crisis-center']);
            return false;
          }
        });
      }
    }
    
      children: [
      {
        path: ':id',
        component: CrisisDetailComponent,
        canDeactivate: [CanDeactivateGuard],
        resolve: {
          crisis: CrisisDetailResolve
        }
      },
    
    ngOnInit() {
      this.route.data
        .subscribe((data: { crisis: Crisis }) => {
          this.editName = data.crisis.name;
          this.crisis = data.crisis;
        });
    }
    

    https://angular.io/docs/ts/latest/guide/router.html#!#resolve-guard

    original

    The new router in RC.4 got resolve added

    resolve is a map of DI tokens used to look up data resolvers. See Resolve for more info.

    class TeamResolver implements Resolve {
      constructor(private backend: Backend) {}
      resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot):Observable<any> {
        return this.backend.fetchTeam(this.route.params.id);
      }
    }
    
    bootstrap(AppComponent, [
      TeamResolver,
      provideRouter([{
        path: 'team/:id',
        component: TeamCmp,
        resolve: {
          team: TeamResolver
        }
      }])
    );
    

    See also RouterConfig

    0 讨论(0)
  • 2020-12-11 04:10

    You have to move your @RouteConfig into the AppCmp constructor:

    //@RouteConfig([
    //  { path: '/', component: HomeCmp, as: 'Home', data: this.history },
    //  { path: '/about', component: AboutCmp, as: 'About' }
    //])
    export class AppCmp {
      history: string[] = [];
      constructor(public list: PersonalizationList,
                  private router_: Router) {
        list.get('histoy', (response) => {
          this.history = response;
        });
        router_.config([
          { path: '/', component: HomeCmp, as: 'Home', data: this.history },
          { path: '/about', component: AboutCmp, as: 'About' }
        ]);
      }
    }
    

    On the console output I could see:

    RouteData {data: "test sample"}

    Hope it helps!

    0 讨论(0)
提交回复
热议问题