Angularjs: использование общего сервиса в разных модулях
Я пытаюсь использовать один и тот же сервис для разных модулей. Есть много модулей, поэтому я попытался внедрить их в родительский модуль. Что-то вроде этого:
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:
Более того, я пытаюсь поделиться переменной со всеми этими подмодулями, используя сервис. Я не уверен, правильно ли я поступаю, используя службу для обмена переменными, или мне следует использовать поставщика или фабрику для этой работы.
РЕДАКТИРОВАТЬ 2:
Я нашел эти ссылки, но не смог понять ответ. Обратитесь к ним и предоставьте мой ответ
Как разделить переменную между несколькими модулями в AngularJS
Передача переменной между контроллерами, которые находятся на разных модулях
1 ответ
Предположим, вы хотите построить 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
если хочешь.
Я надеюсь, что я был полезным.