Библиотека Angular 7 - обнаружена циклическая зависимость (директива, сервис, модуль) - PullRequest
0 голосов
/ 27 февраля 2019

Я создал новый проект Angular 7 с библиотекой.Эта библиотека содержит директиву, сервис и модуль (директива get - это инжектированный сервис и сервис инжекционный токен, который экспортируется в модуль).Я получаю эти предупреждения при компиляции:

ПРЕДУПРЕЖДЕНИЕ в Обнаружена циклическая зависимость: projects \ auth \ src \ lib \ auth.module.ts -> projects \ auth \ src \ lib \ login-form-ref.directive.ts -> projects \ auth \ src \ lib \ auth.service.ts -> projects \ auth \ src \ lib \ auth.module.ts

ПРЕДУПРЕЖДЕНИЕ при обнаружении циклической зависимости: проекты \ auth \src \ lib \ auth.service.ts -> проекты \ auth \ src \ lib \ auth.module.ts -> проекты \ auth \ src \ lib \ login-form-ref.directive.ts -> проекты \ auth \ src\ lib \ auth.service.ts

ПРЕДУПРЕЖДЕНИЕ в Обнаружена циклическая зависимость: проекты \ auth \ src \ lib \ login-form-ref.directive.ts -> проекты \ auth \ src \ lib \ auth.service.ts -> projects \ auth \ src \ lib \ auth.module.ts -> projects \ auth \ src \ lib \ login-form-ref.directive.ts

auth.service.ts

import { Injectable, Inject } from '@angular/core';
import { HttpClient, HttpHeaders, HttpParams, HttpResponse } from '@angular/common/http';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
import { Token } from './models/token';
import { OAuthClient } from './models/oAuthClient';
import { OAUTH_CONFIGURATION } from './auth.module';


@Injectable({
  providedIn: 'root'
})
export class AuthService {
  expectedHttpResponse = 200;

  constructor(
    @Inject(OAUTH_CONFIGURATION) private readonly oAuthClient: OAuthClient
    , private readonly http: HttpClient
  ) { }
...

auth.module.ts

import { NgModule, InjectionToken } from '@angular/core';
import { LoginFormRefDirective } from './login-form-ref.directive';
import { ReactiveFormsModule } from '@angular/forms';
import { OAuthClient } from './models/oAuthClient';
import { HttpClientModule } from '@angular/common/http';

export const OAUTH_CONFIGURATION = new InjectionToken<OAuthClient>('OAUTH_CONFIGURATION');

@NgModule({
  declarations: [LoginFormRefDirective],
  imports: [
    HttpClientModule,
    ReactiveFormsModule
  ],
  exports: [LoginFormRefDirective]
})
export class AuthModule {
  static forRoot(oAuthClientConfig: OAuthClient) {
    return {
      ngModule: AuthModule,
      providers: [
        { provide: OAUTH_CONFIGURATION, useValue: oAuthClientConfig }
      ]
    };
  }
}

login-form-ref.directive.ts

import { Directive, HostListener, Self, Input } from '@angular/core';
import { FormGroupDirective } from '@angular/forms';
import { Token } from './models/token';
import { AuthService } from './auth.service';

@Directive({
  // tslint:disable-next-line:directive-selector
  selector: '[loginFormRef]'
})
export class LoginFormRefDirective {
  @Input() storeTokenMethod: (token) => void;

  constructor(
    @Self() private readonly formGroup: FormGroupDirective
    , private readonly _authService: AuthService
  ) { }
...

Я не знаю причину этогопроблема ...

1 Ответ

0 голосов
/ 27 февраля 2019

Как говорит ошибка, существует круговая зависимость:

export const OAUTH_CONFIGURATION = new InjectionToken<OAuthClient>('OAUTH_CONFIGURATION');

, где OAUTH_CONFIGURATION экспортируется из auth.module, который импортируется в auth.service, и auth.service импортируется в auth.module и директиву.

Попробуйте поместить токен Injection в новый файл и импортировать его в auth.service и auth.module.

token.ts:

export const OAUTH_CONFIGURATION = new InjectionToken<OAuthClient>('OAUTH_CONFIGURATION');

другие файлы:

import { OAUTH_CONFIGURATION } from './token';
...