AngularJS来自不同模块的访问服务

时间:2014-04-09 15:13:34

标签: angularjs

'use strict';

var trkiApp = angular.module('trkiApp', [ 
  'trkiApp.tStatus', 
  'trkiApp.feed'
]);



var tStatus = angular.module('trkiApp.tStatus', [])
    .factory('Status', ['$q']);

var feed = angular.module('trkiApp.feed', []);

现在我不明白我怎么可能访问在另一个模块上定义的服务状态?

'use strict';

feed
    .controller('FeedController', ['$scope','$http','Status']);

我不应该对吗?但不知何故,我......或者这是一种正确的行为吗?

3 个答案:

答案 0 :(得分:52)

Module是配置和运行块的集合,它们在引导过程中应用于应用程序。模块可以列出其他模块作为其依赖项。根据模块的不同,需要在要求模块加载之前加载必需模块。

var myModule = angular.module('myModule', ['module1','module2']);

当你注入你的模块时,服务在配置阶段就已经注册了,你可以访问它们,所以长话短说,它是正确的行为和Angular中依赖注入的核心基础。 例如

angular.module('module1').service('appservice', function(appservice) {
   var serviceCall = $http.post('api/getUser()',"Role");
});

那么如何使用angular.module('myModule');

访问它
angular.module('myModule').controller('appservice', function(appservice)
{
    var Servicedata= appservice.ServiceCall('role');
}

这是如何访问的。如果有人有其他建议请说出来。

答案 1 :(得分:1)

经过一些改变后 HTML应该看起来像:

<body ng-app="myModule" ng-controller="appservices"></body>

上面用于引导角度模块的代码部分

棱角应该看起来像:

 var myModule = angular.module('myModule', ['module1','module2']);
    myModule.controller("appservices",["$scope","mod1factory","mod2factory",function($scope,mod1factory,mod2factory){

       console.log(mod1factory.getData()) ;
       console.log(mod2factory.getData()) ;
    }]);
    var mod1 = angular.module('module1',[]);
    mod1.factory("mod1factory",function(){
        var mod1result = {};
        mod1result = {
            getData: function(){
                return "calling module 1 result";
            }
        }
        return mod1result;
    });
    var mod2 = angular.module('module2',[]);
    mod2.factory("mod2factory",function(){
        var mod2result = {};
        mod2result = {
            getData: function(){
                return "calling module 2 result";
            }
        }
        return mod2result;
    });

说明:创建了一个主模块myModule并注入其他模块(在我的情况下是module1和module2)作为依赖项,这样你就可以访问主模块内的模块并在它们之间共享数据

console.log(mod1factory.getData()) ;
console.log(mod2factory.getData()) ;

创建了两个工厂并将其注入我的控制器mod1factory和mod12factory中。 所以mod1&amp; mod2都是不同的模块,但可以共享信息。在主控制器myModule中

答案 2 :(得分:0)

尝试从另一个模块注入依赖项时遇到了类似的问题。亚历克斯的回答并不适合我。我收到循环依赖错误。

要修复它,请确保您之前包含所有特定于模块的JavaScript。例如,moduleA在另一个JS文件中定义。

var app = angular.module('plunker', ['moduleA']);

app.controller('MainCtrl', function($scope, MainService) {
  $scope.name = 'World';

  $scope.hello = MainService.hello();

});

工作示例Plunker