我有一个localStorageService,其实现必须是通用的,这意味着它不能绑定到某个服务,如'customerServicer'或'productService'
localStorageService应该接受service / get注入的服务,该服务不是服务的文字字符串名称。
如果没有angularjs中的类型/接口,我怎么能这样做????
'use strict';
angular.module('myapp').service('localStorageService', function (localStorageService, customerService) {
// impl generic caching functions which works for all CRUD services
});
答案 0 :(得分:0)
你想要这样的东西:
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');
});
希望这有帮助!
答案 1 :(得分:0)
您可以使用具有返回实际实现的通用服务名称的工厂。
factory('localStorage', ['myLocalStorage', function(myLocalStorage) { return myLocalStorage} ])
因此,如果你想用其他东西替换myLocalStorage的实现,你只需要在这一个地方进行。
关于类型和接口。打字稿给你这些。
例如,您可以定义一个接口ITokenStorage,了解您希望如何存储令牌。然后,您可以传入$ sessionStorage,$ localStorage或$ cookieStorage作为实现该接口的类型,以轻松更改您希望存储令牌的方式。
这对Angular 1.x来说都是可行的。 TypeScript是opensource并使用Npm进行安装。 IDE和编辑器支持它。