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:
Более того, я пытаюсь поделиться переменной со всеми этими подмодулями, используя сервис. Я не уверен, правильно ли я поступаю, используя сервис для совместного использования переменной, или мне следует использовать для этого Provider или Factory работа.

EDIT 2:
Я нашел эти ссылки, но не смог понять ответ. Обратитесь к ним и предоставьте мой ответ
Как для совместного использования переменной между несколькими модулями в AngularJS
Передача переменной между контроллерами, которые находятся в разных модулях


person jAYANT YADAV    schedule 14.07.2016    source источник
comment
stackoverflow .com/questions/16725392/   -  person Chandra Kudumula    schedule 14.07.2016


Ответы (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, если хотите.

Надеюсь, я был полезен.

person AndreaM16    schedule 14.07.2016
comment
очень хорошо сказано. Но я сомневаюсь, как разделить myService на контроллеры, когда они находятся в разных модулях? То, что я исследовал, подталкивает меня к созданию родительского модуля, зависимостями которого являются модули, которым необходимо совместно использовать общий myService. Сделайте службу частью родительского модуля, а затем внедрите службу в эти дочерние модули. Но я не уверен, как именно это выполнить - person jAYANT YADAV; 14.07.2016
comment
Почему бы вам просто не внедрить сервис в детей? - person AndreaM16; 16.07.2016
comment
Я попытался сделать то же самое, хотя мне удалось использовать службу, но я все еще не смог поделиться переменной в этих дочерних модулях, используя эту службу. - person jAYANT YADAV; 17.07.2016