Резолвер не работает должным образом

Я создал преобразователь, и за исключением того, что все компоненты будут загружаться после завершения работы преобразователя, но иногда компоненты загружаются до выполнения функции преобразователя.

Код преобразователя:

import { Injectable } from '@angular/core';
import { Resolve, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { Observable } from 'rxjs/Rx';
import { ApiService } from '../services';
import { AppState } from 'spotlightcloud-angular-common-website';
import { Locale } from '../locale/locale';

@Injectable()
export class MetricsLocaleResolver implements Resolve<any> {
  constructor(public api: ApiService, public appState: AppState, private locale: Locale) {
  }

  resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<any> | Promise<any> | any {
    return this.api.get('monitoring', 'uiconfiguration/metricsmetadata', {}).subscribe(
      localeData => {
        console.log('localeData: ', localeData);
        this.locale.setMetricsLocaleObj(localeData);
      }
    );
  }
}

Печать localeData иногда появляется после печати в компоненте (в жизненном цикле onChanges).


person Shiffi    schedule 23.10.2017    source источник
comment
Что вызывает resolve в экземпляре MetricsLocaleResolver? Ваши компоненты?   -  person Igor    schedule 23.10.2017


Ответы (1)


Изменять

return this.api.get('monitoring', 'uiconfiguration/metricsmetadata', {}).subscribe(

to

return this.api.get('monitoring', 'uiconfiguration/metricsmetadata', {}).map(

Если вы вызываете .subscribe(), вы возвращаете Subscription, вместо этого маршрутизатор ожидает значение Observable, Promise или boolean.

Обратный вызов также должен возвращать логическое значение.

  localeData => {
    console.log("localeData:",localeData);
    this.locale.setMetricsLocaleObj(localeData);
    return true;
  }
person Günter Zöchbauer    schedule 23.10.2017