2016-06-15 84 views
1

假设只有一个工厂(共享服务)的模块。如何在不使用共享服务的控制器上使用共享服务?

angular.module('sharedService', []) 
    .factory('sharedSrv', sharedService) 

function sharedService() { 
    var number; 

    return { 
    getNum: getNumber 
    }; 

    function getNumber() { 
    return number; 
    } 

    function setNumber(i) { 
    number = i; 
    } 
} 

我看到了,我们可以通过传递依赖到模块

angular.module('app', ['sharedService']) 
.controller('theCtrl', function(sharedSrv) { 
    var self = this; 

    self.setSharedNumber = sharedSrv.setNumber; 
} 

然而,如何从自己的模块注入,如果控制器使用的服务共享服务注入共享的服务?

angular.module('app', ['sharedService']) 
.controller('theCtrl', theCtrlFun) 
.service('theSrv', theSrvFun) 

theCtrlFun.$inject = ['theSrv'] 

function theCtrlFun(localSrv) { 
// How call sharedService ? 
} 

function theSrvFun() { 
    // Some fantastic features. 
} 

谢谢你的帮忙。

回答

2

你不应该注射服务模块变量定义DI,你需要通过模块的名称为string

angular.module('app', [sharedService]) 
.controller('theCtrl', function(sharedSrv) { 

应be

angular.module('app', ['sharedService']) 
.controller('theCtrl', function(sharedSrv) { 

或者你可以遵循DI

的内联阵注释
angular.module('app', ['sharedService']) 
.controller('theCtrl', ["sharedSrv", function(sharedSrv) { 
    //code here 
}]); 
+0

感谢您的纠正。但在你的最后一块,如果这个服务在另一个应用程序模块中,“sharedSrv”将会被识别出来吗? –

+0

@MatthieuLobry,这是错字,谢谢你抬头,我已经修复它.. –

1

从声明angular.module('app', [sharedService])中删除sharedService,因为您的共享服务不是本模块的一部分。

你需要注入theSrv而不是theSrvFun在声明中theCtrlFun.$inject = ['theSrv']

theCtrlFun功能只需要调用该服务的方法。 e.g someMethod是在theSrv服务定义,你需要这样的

theSrv.someMethod(); 

例如调用

angular.module('app', []) 
    .controller('theCtrl', theCtrlFun) 
    .service('theSrv', theSrvFun) 

theCtrlFun.$inject = ['theSrv'] 

function theCtrlFun(localSrv) { 
    theSrv.someMethod(); // calll in this way 
} 

function theSrvFun() { 
    // Some fantastic features. 
} 

其更好地利用Array Annotation

angular.module('app', []) 
    .controller('theCtrl', ['theSrv', function(theSrv) { 

     theSrv.callMe(); 

    }]) 
    .service('theSrv', function() { 

     this.callMe = funtion() { 


     } 

    }) 
+0

谢谢你的帮助我取得了语法有效的许多错误。 但我想同时在同一个controllerm中使用sharedService和TheSrv。 (Srv将包含仅用于Ctrl的工具,但其他模块将使用sharedService)。 –

0

试试这个:

angular.module('app', []) 
.controller('theCtrl', theCtrlFun) 
.service('theSrv', theSrvFun) 

theCtrlFun.$inject = ['theSrv'] 

function theCtrlFun(localSrv) { 
// How call sharedService ? 
console.log(localSrv) 
} 

function theSrvFun() { 
    // Some fantastic features. 
} 

plnkr:http://plnkr.co/edit/lSosJbYfG6tuF4pCXYqR?p=preview

+0

谢谢你,我犯了错误。 但是,如果我想在同一个控制器中使用SRV和sharedService,我该怎么办? –

+0

要使用其他模块的服务,您需要将该模块注入您的模块,然后将该模块的服务注入您的控制器 –