Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 在不引用具体服务名称的情况下插入服务_Angularjs - Fatal编程技术网

Angularjs 在不引用具体服务名称的情况下插入服务

Angularjs 在不引用具体服务名称的情况下插入服务,angularjs,Angularjs,我有一个localStorageService,它的实现必须是泛型的,这意味着它不能绑定到特定的服务,如“customerServicer”或“productService” localStorageService应该接受一个服务/注入一个不是该服务的文本字符串名称的服务 如果没有angularjs中的类型/接口,我怎么做 'use strict'; angular.module('myapp').service('localStorageService', function (localSto

我有一个localStorageService,它的实现必须是泛型的,这意味着它不能绑定到特定的服务,如“customerServicer”或“productService”

localStorageService应该接受一个服务/注入一个不是该服务的文本字符串名称的服务

如果没有angularjs中的类型/接口,我怎么做

'use strict';
angular.module('myapp').service('localStorageService', function (localStorageService, customerService) {

    // impl generic caching functions which works for all CRUD services
});

你想要这样的东西吗:

myAppModule.factory('genericService', ['$injector', function(injector) {
    return {
        get: function(serviceName) {
            return $injector.get(serviceName);
        }
    };
}]);
现在在另一个位置,如控制器中:

myAppModule.controller('TestController', function($scope, genericService) {
    // Use the generic service to get another service instance
    var appService = genericService.get('appService');
});

希望这有帮助

您可以将工厂与返回实际实现的通用服务名称一起使用

factory('localStorage', ['myLocalStorage', function(myLocalStorage) { return myLocalStorage} ]) 
因此,如果您想用其他东西替换myLocalStorage的实现,您只需要在这一个地方进行

关于类型和接口。打字稿给你这些

例如,您可以定义一个接口ITokenStorage,说明您希望如何存储令牌。然后,您可以将$sessionStorage、$localStorage或$cookieStorage作为实现该接口的类型传入,以便轻松更改存储令牌的方式


这一切都可以通过角度1.x实现。TypeScript是开源的,使用Npm安装。IDE和编辑器支持它

抱歉被“具体的服务名称”弄糊涂了。是否询问如何将服务注入另一个服务?@Dom在函数参数中写入服务名称时,服务会自动注入。但我不想将自己绑定到服务名称。我想为我的所有服务编写一个通用的工作缓存服务。因此,我无法在注入参数中写入文字服务名称。您的问题似乎不清楚。您想要一个接受另一个服务名称并返回其实例的通用服务吗?您的意思是希望您的服务自动加载到所有其他服务中吗?@ShashankAgrawal我想要一个接受另一个服务的通用服务。但无法使用注入的服务名称,因为无法将泛型服务绑定到具体的服务名称以进行泛型工作。否;-)我不想让localStorageService具有多个实现—这会破坏泛型类的用途。我想让localStorageService使用泛型服务名称,这样每个服务都可以被注入@Elisa,通用服务名称的示例是什么?我给出的示例允许您在另一个名称下插入一个名称的服务?“这和你想要的不同吗?”马丁,我想你是对的。泛型可以是任何东西,但您总是需要知道要实现什么。@elisa,我自己不使用使用工厂返回另一个服务的模式,但我使用的模式是任何存储服务都可以实现的泛型Typescript接口。@Martin我不使用Typescript,也不打算学习它:-)