我正在尝试为不同的模块使用相同的服务。有很多模块,所以我试图将它们注入父模块中。像这样:
var app=angular.module('myapp',['module_1','module_2',....,'module_n']);
var module_1=angular.module('myapp1',[]);
var module_2=angular.module('myapp2',[]);
var module_3=angular.module('myapp3',[]);
.
.
.
var module_n=angular.module('myappN',[]);
并且所有 n 模块共有的服务是这样的:
.service('myService',function(){
...doing something here...
});
现在我无法弄清楚如何将这项服务用于所有子模块
我应该使用哪个模块关联此服务?
我尝试过做app.service('myService',function(){...})
,但它没有用。
我哪里错了?
编辑1:
此外,我试图使用服务与所有这些子模块共享变量。我不确定是否通过使用服务来共享变量做正确的事情,或者我应该使用提供商或 Factory 工作。
编辑2:
我找到了这些链接,但我无法理解答案。请参考它们,请提供我的答案
How to share a variable between multiple modules in AngularJS
Passing variable between controllers which are on different modules
答案 0 :(得分:0)
让我们假设您要构建Service
以在两个Controllers
之间共享某个变量。您应该可以使用Service
执行以下操作:
<强> MyService.js 强>
// Lets suppose you want to share a certain variable between controllers
angular
.module('myApp')
.service('myService', function () {
// If you wish you can inject and use $scope
var vm = this;
// Variable to share
vm.sharedItem;
// Method to set a certain value into a variable
function setItem(item){
vm.sharedItem = item;
}
// Method to get that variable
function getItem(){
return vm.sharedItem;
}
// Exposing your methods
return {
setItem : setItem
getItem : getItem
}
});
<强> SetController.js 强>
angular
.module('myApp')
.controller('SetController', SetController);
// Inject your Service
function SetController(myService) {
var vm = this;
// variable used to set the value
vm.setMe = 'hello';
// Call `setItem()` method from `myService` -> sharedItem will get setMe value
myService.setItem(vm.setMe);
console.log("Set shared item "+vm.setMe);
};
<强> GetController.js 强>:
angular
.module('myApp')
.controller('GetController', GetController);
// Inject your Service
function SetController(myService) {
var vm = this;
// variable used to get shared the value
vm.getMe= null;
/* Call `getItem()` method from `myService` to get the shared
* value and assign it to `getMe`*/
vm.getMe = myService.getItem();
console.log("Got shared item "+vm.getMe);
};
我提醒您可以使用this.var
在视图中访问controllerName.var
。这是一个很好的解决方案,以确保您使用某个控制器。如果您愿意,可以随时使用$scope
。
我希望我能提供帮助。