Amy*_*yth 32 javascript angularjs
我相当新,angularjs
并且无法找到任何文档或示例.我要做的是扩展基本服务,以便我可以使用其他服务的基本服务定义的方法.例如,假设我有如下基本服务.
angular.module('myServices', []).
factory('BasicService', function($http){
var some_arg = 'abcd'
var BasicService = {
method_one: function(arg=some_arg){ /*code for method one*/},
method_two: function(arg=some_arg){ /*code for method two*/},
method_three: function(arg=some_arg){ /*code for method three*/},
});
return BasicService;
}
);
Run Code Online (Sandbox Code Playgroud)
现在我想定义一个从上面扩展的扩展服务,BasicService
以便我可以使用我的扩展服务在BasicService下定义的方法.也许是这样的:
factory('ExtendedService', function($http){
var ExtendedService = BasicService();
ExtendedService['method_four'] = function(){/* code for method four */}
return ExtendedService;
}
Run Code Online (Sandbox Code Playgroud)
S.C*_*.C. 69
更清洁和势在必行的方式
.factory('ExtendedService', function($http, BasicService){
var extended = angular.extend(BasicService, {})
extended.method = function() {
// ...
}
return extended;
}
Run Code Online (Sandbox Code Playgroud)
Ste*_*wie 22
你ExtendedService
应该注入BasicService
,以便能够访问它.除此之外BasicService
是对象文字,因此您实际上不能将其称为function(BasicService()
).
.factory('ExtendedService', function($http, BasicService){
BasicService['method_four'] = function(){};
return BasicService;
}
Run Code Online (Sandbox Code Playgroud)
Vit*_*kov 18
在我看来,更好的方法:
.factory('ExtendedService', function($http, BasicService){
var service = angular.copy(BasicService);
service.methodFour = function(){
//code for method four
};
return service;
});
Run Code Online (Sandbox Code Playgroud)
这里至少不会改变继承的服务.