3

我正在尝试对不同的模块使用相同的服务。有很多模块,所以我尝试将它们注入到父模块中。像这样的东西:

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:
此外,我正在尝试使用service与所有这些子模块共享一个变量。我不确定我是否通过使用共享变量的服务来做正确的事情,或者我是否应该使用提供者工厂来完成这项工作。

编辑 2:
我找到了这些链接,但我无法掌握答案。参考他们并请提供我的答案
如何在AngularJS中的多个模块之间共享变量
在不同模块上的控制器之间传递变量

4

1 回答 1

0

假设您要构建一个Service在两个 之间共享某个变量Controllers。您应该能够使用您Service执行以下操作:

我的服务.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);
  };

获取控制器.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如果您愿意,您可以随时使用。

我希望我对您有所帮助。

于 2016-07-14T17:49:39.773 回答