Служба доступа 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']);
Я не прав? Но почему-то я... или это правильное поведение?
Ответы
Ответ 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