假设有一个模块只有一个工厂(共享服务)。
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.
}
感谢您的帮助。
答案 0 :(得分:2)
您不应该将服务模块注入变量,您需要将模块名称传递为string
angular.module('app', [sharedService])
.controller('theCtrl', function(sharedSrv) {
应该是
angular.module('app', ['sharedService'])
.controller('theCtrl', function(sharedSrv) {
或者您可以按照DI
的内联数组注释进行操作angular.module('app', ['sharedService'])
.controller('theCtrl', ["sharedSrv", function(sharedSrv) {
//code here
}]);
答案 1 :(得分:1)
从语句sharedService
中删除angular.module('app', [sharedService])
,因为您的共享服务不属于此模块。
您需要在语句theSrv
theSrvFun
而不是theCtrlFun.$inject = ['theSrv']
在theCtrlFun
函数中,只需调用此服务的方法即可。
例如,someMethod
服务上定义了theSrv
,您需要像这样调用
theSrv.someMethod();
e.g。
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
定义DIangular.module('app', [])
.controller('theCtrl', ['theSrv', function(theSrv) {
theSrv.callMe();
}])
.service('theSrv', function() {
this.callMe = funtion() {
}
})
答案 2 :(得分: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.
}