如何在不同模块中的两个控制器之间共享服务

时间:2015-02-26 09:13:16

标签: angularjs angularjs-scope controllers

我需要在两个控制器之间移动。 控制器位于不同的模块中。 我如何在他们之间分享服务?

示例:

var app1 = angular.module('Module1', []);

app1.controller('FirstController', function ($scope,mutualService) {

//Doing things
});

var app2 = angular.module('Module2', []);

app2.controller('SecondController', function ($scope,mutualService) {

//Doing things
});

现在我也创建了一项服务,但我不明白如何正确地编写它。

{???}.service('mutualService', function() {

    this.myObject = new MyObject();
});

我不知道在{???}。服务中放置什么。 我无法放置app1或app2,因为其他两个人都不知道它? 我错了吗?

4 个答案:

答案 0 :(得分:0)

是的,你可以。您只需将服务模块设置为两个控制器模块的依赖关系。

首先:

var serviceModule = angular.module('ServiceModule', []);
serviceModule.service('MutualService', function() {

    this.myObject = new MyObject();
});

然后:

var app2 = angular.module('Module2', ['ServiceModule']);

答案 1 :(得分:0)

您可以在模块中导入模块:

var app1 = angular.module('Module1', []);

app.controller('FirstController', function ($scope,mutualService) {

//Doing things
});

var app2 = angular.module('Module2', ['Module1']);

app.controller('SecondController', function ($scope,mutualService) {

//Doing things
});

app1.service...

答案 2 :(得分:0)

您可以通过注入模块在您要使用的所有控制器和应用之间共享服务。然后只需从任何地方定义和调用您的函数。

  

注意:由于您无法在同一模板中使用两个应用,因此您必须在此处进行一些解决方法 - > Link

运行我的代码示例,在两个不同的应用程序中调用服务功能,触发两个警报:



// define app1 and app2 and inject services module
var app = angular.module('app', ['app1', 'app2']),
    app1 = angular.module('app1', ['services']),
    app2 = angular.module('app2', ['services']);

angular.module('services', []).factory('mutualService', function() {
  // define service functions here
  var sampleFunc = function(str) {
    alert(str);
  };
  return {
    sampleFunc: sampleFunc
  };
});

// injecting mutualService into Ctrl1
app1.controller('Ctrl1', function(mutualService) {
  // call service function
  mutualService.sampleFunc('Ctrl1');
});

// injecting mutualService into Ctrl2
app2.controller('Ctrl2', function(mutualService) {
  // call service function
  mutualService.sampleFunc('Ctrl2');
});

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<div ng-app="app">
  <div ng-controller="Ctrl1"></div>
  <div ng-controller="Ctrl2"></div>
</div>
&#13;
&#13;
&#13;

答案 3 :(得分:-1)

在不同的模块上编写服务,你可以将这个模块作为依赖关系传递给所有模块,无论你想要什么..

var serviceModule = angular.module('ServiceModule', []);
serviceModule.service('MutualService', function() {

    this.myObject = new MyObject();
});

代表: var app = angular.module('Module', ['ServiceModule']);

否则在任何一个模块上写服务并将该模块作为依赖项传递给下一个模块,并且不要忘记在控制器中注入服务..

这个答案可能对你有帮助....