Подтвердить что ты не робот

Служба доступа 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']);

Я не прав? Но почему-то я... или это правильное поведение?

4b9b3361

Ответ 1

Модуль - это набор блоков конфигурации и запуска, которые применяются к приложению во время процесса начальной загрузки. Модули могут перечислять другие модули как их зависимости. В зависимости от модуля следует, что необходимый модуль должен быть загружен перед загрузкой требует модуля.

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');
}

Вот как это можно получить. Если у кого-то есть другое предложение, скажите, пожалуйста.

Ответ 2

После внесения некоторых изменений 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 и mod2 оба разные модули, но могут делиться информацией. внутри главного контроллера myModule

Ответ 3

У меня была аналогичная проблема при попытке ввода зависимостей из другого модуля. Ответ Алекс не работал у меня. Я получал ошибку круговых зависимостей.

Чтобы исправить это, убедитесь, что вы уже включили весь JavaScript для конкретного модуля. Например, moduleA был определен в другом JS файле.

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

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

  $scope.hello = MainService.hello();

});

Рабочий пример Plunker