Uncaught (в обещании): TypeError: guard не является функцией - когда Class расширяет другой класс - PullRequest
0 голосов
/ 21 сентября 2018

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

Маршрутизация приложений:

const routes: Routes = [
{
    path: AppRoutes.WorkflowRoute,
    canActivate: [AuthGuardService, UserConfigsService],
    data: { applicationIdentifier: ApplicationIdentifiers.Workflow, route: AppRoutes.WorkflowRoute },
    loadChildren: 'app/pages/workflowexplorer/workflowexplorer.module#WorkflowexplorerModule',
}]

Служба UserConfig: (как вы можете видеть, это расширяет DataProviderService)

@Injectable({
  providedIn: 'root'
})
export class UserConfigsService extends DataProviderService implements CanActivate {
      private controllerName: string = '/UserConfigs/';
      private userCofigs: UserCofig[];
      private userConfigsUpdatedSource = new Subject<boolean>();
      userConfigsUpdated = this.userConfigsUpdatedSource.asObservable();
      private dataSubject = new ReplaySubject<UserCofig[]>();

      canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | Observable<boolean> | Promise<boolean> {
        if (this.authService.isLoggedIn()) {
          const applicationIdentifier = route.data['applicationIdentifier'] as number;
          this.getUserConfigsForApplication(applicationIdentifier).subscribe((response) => {
            this.userCofigs = <UserCofig[]>response;
          }, error => console.log(`Error : ${error}`));
        }
        return true;
      }

DataProvider:

@Injectable({
  providedIn: 'root'
})
export class DataProviderService {
    private baseUrl: string = '';
    private apiVersion: string = '';
    private commomErrorMessage: string = 'Something went wrong please try again';

    constructor(public http: HttpClient,
        private appConfigurationService: AppConfigurationService,
        private messageDialogService: MessageDialogService,
        private spinnerService: SpinnerService,
        public authService: AuthService
    ) {
        this.baseUrl = this.appConfigurationService.getPreDefineBaseUrl();
        this.apiVersion = `v${this.appConfigurationService.getPreDefineApiVersion()}`;
    }

Как показано в ошибке, для UserConfigsService защита установлена ​​как DataProvideService, которая не реализует canActivate.Error Screenshot

Вопросы:

  1. Правильна ли эта конфигурация или я что-то упустил?

  2. Не могу понять, почему такая же конфигурация работает на других машинах, кроме моей?

  3. Что-нибудь, что я должен попробовать по-другому?

Обновление:

После дальнейшего изучения я обнаружил, что каждый раз, когда он внедряет UserConfigsService, возвращается объект DataProviderService.Я не уверен почему.

AppComponent запрашивает UserConfigsService, но получает DataProviderService.

Воспроизведение GitHub Link

...