如何将共享服务与不使用共享服务的控制器一起使用?
How use shared services with controllers that use no shared services?
假设有一个模块只有一个工厂(共享服务)。
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.
}
感谢您的帮助。
从声明 angular.module('app', [sharedService])
中删除 sharedService
,因为您的共享服务不是此模块的一部分。
您需要在语句 theCtrlFun.$inject = ['theSrv']
中注入 theSrv
而不是 theSrvFun
在theCtrlFun
函数中调用这个服务的方法即可。
例如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定义DI
angular.module('app', [])
.controller('theCtrl', ['theSrv', function(theSrv) {
theSrv.callMe();
}])
.service('theSrv', function() {
this.callMe = funtion() {
}
})
您不应该将服务模块作为变量注入,您需要将模块名称作为 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
}]);
试试这个:
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.
}
假设有一个模块只有一个工厂(共享服务)。
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.
}
感谢您的帮助。
从声明 angular.module('app', [sharedService])
中删除 sharedService
,因为您的共享服务不是此模块的一部分。
您需要在语句 theCtrlFun.$inject = ['theSrv']
theSrv
而不是 theSrvFun
在theCtrlFun
函数中调用这个服务的方法即可。
例如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定义DI
angular.module('app', [])
.controller('theCtrl', ['theSrv', function(theSrv) {
theSrv.callMe();
}])
.service('theSrv', function() {
this.callMe = funtion() {
}
})
您不应该将服务模块作为变量注入,您需要将模块名称作为 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
}]);
试试这个:
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.
}