7

以下服务提供者注册成功。其他控制器可以毫无问题地使用该服务。我的问题是如何访问提供程序以便在服务实例化服务之前对其进行配置$injector

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);

}

我尝试使用类名作为访问器,但这样做时整个应用程序会失败。

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

文档仅显示了一个使用命名函数来实例化提供程序的示例。稍后在解释中,命名函数的名称用于访问提供程序。

因为在上面的示例中使用了 TypeScript 类,所以没有用于访问提供程序的命名函数。那么,在使用 TypeScript 类时如何配置提供程序呢?

4

1 回答 1

4

问题在于您注册的提供商。代替

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

做:

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

并像您一样在配置阶段访问BaseServiceProvider(后缀词Provider)。在其他任何地方注入提供者实例时,您可以使用BaseService. 所以基本上你不注入类名,而是注入它注册的名称。

于 2015-06-12T21:21:16.597 回答