我的Angular应用程序中有很多函数使用大部分相同的代码。所以我决定创建一个由频繁复制的代码组成的服务,并将差异作为参数。
每个重复功能的主要和少数差异之一是它们使用不同的服务。
例如,在一个简化的摘录中,有一个:
$scope.signin = function(email, password){
loginSrvc(email, password).execute()
.success(function(data, status, headers, config){
if (status == 200){
....
一个人
$scope.logout = function(){
$scope.loading = true;
signoutSrvc().execute()
.success(function(data, status, headers, config){
if (status == 200){
....
但基本上它们是相同的。
我希望能够将每个函数正在使用的服务(例如loginSrvc
,signoutSrvc
等)传递给处理所有此类代码的外部服务。
但是,当我将服务传递给我的新服务时,它在另一端显示为undefined
。
我的新服务如下:
sharedFunctionsApp.factory('serverCommunicationFactory', [function(){
console.log("serverCommunicationFactory");
return function(service){
console.log(service);
service.execute();
}
}]);
我从其他模块传递服务(当然注入ShareFunctions
模块之后),如下所示:
serverCommunicationFactory()(loginSrvc);
然而它仍显示为undefined
。
如何将我的服务传递给这个新的共享服务?
答案 0 :(得分:1)
当然,您可以在服务中注入其他服务,就像它一样:
sharedFunctionsApp.factory('yourServiceName', ['theServiceToInject', function(theServiceToInject){
return {
yourServiceMethode: function() {
console.log(theServiceToInject);
return;
}
}
}]);
编辑:
您也可以使用注射器注入您的服务:docs 然后动态注入服务,例如:
var myService = $injector.get('MyServiceName');
答案 1 :(得分:0)
是的,你当然可以将一项服务注入另一项服务。
HTML
<div ng-app="myApp" ng-controller="startCtrl">
</div>
的.js
var app=angular.module("myApp",[]);
app.factory("firstService",function(){
return{
myFunction:function()
{
var myVar="Hello from service one";
return myVar;
}
}
});
app.factory("secondService",function(firstService){
return{
callToFirstService:function()
{
var result=firstService.myFunction();
return result;
}
}
});
app.controller("startCtrl",function($scope,secondService){
var finalResult= secondService.callToFirstService();
console.log(finalResult);
});
你可以用工作小提琴来检查......
https://jsfiddle.net/codu16t5/
这是一个小型演示。