7

Następujący rejestrator pomyślnie zakończył rejestrację. Inne kontrolery mogą korzystać z usługi bez problemów. Moje pytanie brzmi: jak uzyskać dostęp do dostawcy, aby skonfigurować go, zanim usługa zostanie utworzona przez usługę $injector?Jak uzyskać dostęp do usługodawcy podczas rejestracji przy użyciu klasy maszynopisu

module apiService{ 

    export interface IBaseService{ 
     leagueID: number; 
    } 

    export interface IApiBaseServiceProvider extends ng.IServiceProvider{ 
     setLeagueID(leagueID: number): void; 
     $get(): IBaseService; 
    } 

    class BaseServiceProvider implements IApiBaseServiceProvider{ 

     private _leagueID: number; 

     $get(){ 
      return new BaseService(this._leagueID); 
     } 

     setLeagueID(leagueID: number){ 
      this._leagueID = leagueID; 
     }; 


    } 

    class BaseService implements IBaseService{ 

     constructor(private _leagueID: number){}; 

     get leagueID(){ 
      return this._leagueID; 
     } 

    } 

    angular.module('apiService').provider('apiService.baseService', BaseServiceProvider); 

} 

Próbowałem używać nazwy klasy jako akcesor, ale cała aplikacja nie powiedzie się.

angular.module('apiService').config(['BaseServiceProvider', function(baseServiceProvider: IApiBaseServiceProvider){ 
    baseServiceProvider.setLeagueID(12);  
}]); 

The documentation pokazuje tylko przykładowe gdzie nazwany funkcja służy do wystąpienia dostawcy. Później w wyjaśnieniu nazwa nazwanej funkcji jest używana do uzyskania dostępu do dostawcy.

Ponieważ w powyższym przykładzie użyto klasy TypeScript, nie ma nazwanej funkcji do uzyskiwania dostępu do dostawcy. Jak skonfigurować usługodawcę podczas używania klasy TypeScript?

Odpowiedz

4

Problem dotyczy rejestracji operatora. Zamiast

angular.module('apiService').provider('apiService.baseService', BaseServiceProvider); 

zrobić:

angular.module('apiService').provider('BaseService', BaseServiceProvider); 

i dostęp w fazie config jak ty, BaseServiceProvider (postfix słowo Provider). Podczas wstrzykiwania instancji dostawcy w dowolne miejsce, możesz po prostu użyć BaseService. Więc zasadniczo nie wstrzykujesz nazwy klasy, zamiast tego wstrzykujesz nazwę, w której jest zarejestrowana.

+1

To działało jak czar. Udało mi się zachować 'apiService.baseService' i po prostu dołączyć 'Provider', tak jak poleciłeś stworzyć' apiService.baseServiceProvider'. Dziękuję bardzo za pomoc i niesamowicie szybką reakcję. – proff321

+0

@ proff321 Tak, też by działało. Najważniejszą rzeczą jest wstrzyknięcie nazwy, w której jest zarejestrowana. – PSL