角大师,我对角度有点新意 . 非常感谢您的帮助 .

1)以下方法工作正常:

app.routing.ts

const appRoutes: Routes = [
   { path: 'clone', component: CloneComponent,
        children: [
        {path: 'status', component: StatusComponent, resolve: {config: ConfigResolver} },
        ]
    },
]

config.service.ts

@Injectable()
export class ConfigService {
  private configsArray = new BehaviorSubject<Config>(undefined);
  configsArray$ = this.configsArray.asObservable().first();
  updateConfigs(configs: Config) {
    this.configsArray.next(configs)
  }

  getConfigs() {
    let headers = new Headers();
    headers.append('Content-Type','application/json');
    this.updateFetchConfigs('Fetching');
    return this.http.get('http://localhost:8080/sample1/api/config', { headers: headers }).map((response: Response) => response.json());
  }
}

config-resolver.service.ts

@Injectable()
export class ConfigResolver implements Resolve<Config> {
  config: Config;

  constructor(private configService: ConfigService, private router:Router) {}

  resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<Config> | Promise<Config> | Config {
    return this.configService.configsArray$.map(    // this is working
      data => {
          return data;
      }
    );
  }
}

app.component.ts

export class AppComponent implements OnInit, OnDestroy {
  constructor(private route: ActivatedRoute,
              private router:Router,
              private configService:ConfigService ) {
  }

  ngOnInit() {
    this.configsSubscription = this.configService.getConfigs().subscribe(configs => { 
      this.configs = configs;
      this.configService.updateConfigs(configs);
    }
  }

}

2)执行this.configService.getConfigs()时出现以下错误.map from config-resolver.service.ts

错误

错误错误:未捕获(在承诺中):TypeError:无法读取未定义的属性“map”

config.service.ts

@Injectable()
export class ConfigService {
  private configsArray = new BehaviorSubject<Config>(undefined);
  configsArray$ = this.configsArray.asObservable().first();
  updateConfigs(configs: Config) {
    this.configsArray.next(configs)
  }

  getConfigs() {
    let initialLoad: number = 0;
    let initialLoadDone: boolean = false;
    if (this.fetchConfigs) == 'NotFetched') {
       // if it meets this if condition it is working
       let headers = new Headers();
       headers.append('Content-Type','application/json');
       this.updateFetchConfigs('Fetching');
       return this.http.get('http://localhost:8080/sample1/api/config', { headers: headers }).map((response: Response) => response.json());
    }
    else {
       // if it does not meet this if condition it is not working
       Observable.interval(1)
       .takeWhile(() => !initialLoadDone)
       .subscribe(() => { 
          ++initialLoad;
          if (this.getConfigs1(this.fetchConfigs$) == 'Fetched' || initialLoad > 10000) {
             initialLoadDone = true;
             return this.configsArray$;
          }
       });
    }
  }
}

config-resolver.service.ts

@Injectable()
export class ConfigResolver implements Resolve<Config> {
  config: Config;

  constructor(private configService: ConfigService, private router:Router) {}

  resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<Config> | Promise<Config> | Config {
    return this.configService.getConfigs().map(     
      data => {
        return data;
      }
    );
  }

}

/ *

未捕获(承诺):TypeError:无法读取未定义错误的属性映射 - 从上面返回命令this.configService.getConfigs() . map

如果getConfigs()函数返回this.configsArray $(来自config.service.ts getConfigs()函数的条件),则会出现上述错误,

它是有效的,如果getConfigs()函数returs this.http.get(..) . map(..)(即如果条件来自config.service.ts getConfigs()函数)

  • /

status.component.ts

export class StatusComponent implements OnInit, OnDestroy {

  constructor(private configService:ConfigService,
              private route: ActivatedRoute,
              private router: Router) {}

  ngOnInit() {
    this.configSubscription = this.route.data.subscribe(
        (data: Data) => {
          this.test = data['config'];
        }
    );
  }

}

谢谢