您能否将 Angular 服务作为参数传递给另一个 Angular 服务提供的函数?
Can you pass an Angular service as a parameter to a function provided by another Angular service?
我的 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
。
如何将我的服务传递给这个新的共享服务?
当然你可以在一个服务中注入其他服务,就像这样:
sharedFunctionsApp.factory('yourServiceName', ['theServiceToInject', function(theServiceToInject){
return {
yourServiceMethode: function() {
console.log(theServiceToInject);
return;
}
}
}]);
编辑:
您还可以使用注入器来注入您的服务:docs
然后动态注入服务,执行如下操作:
var myService = $injector.get('MyServiceName');
是的,您当然可以将一项服务注入另一项服务。
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);
});
你可以在工作中查看这个 fiddle.....
https://jsfiddle.net/codu16t5/
这是一个小演示。
我的 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
。
如何将我的服务传递给这个新的共享服务?
当然你可以在一个服务中注入其他服务,就像这样:
sharedFunctionsApp.factory('yourServiceName', ['theServiceToInject', function(theServiceToInject){
return {
yourServiceMethode: function() {
console.log(theServiceToInject);
return;
}
}
}]);
编辑:
您还可以使用注入器来注入您的服务:docs 然后动态注入服务,执行如下操作:
var myService = $injector.get('MyServiceName');
是的,您当然可以将一项服务注入另一项服务。
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);
});
你可以在工作中查看这个 fiddle.....
https://jsfiddle.net/codu16t5/
这是一个小演示。