2016-01-19 1 views
0

Мне нужно использовать те же данные на двух разных контроллерах, одна - это страница, а другая - модальное всплывающее окно. Я создал службу, которая будет выполнять $ http.get для вывода данных. Однако, когда я применяю сервис к Modal Popup, он прекращает загрузку и даже данные не загружаются нигде.Не удается получить доступ к службам на двух контроллерах AngularJs

Моя_служба

(function(){ 
    'use strict'; 
    angular.module('sspUiApp.services') 
    .service('AdUnitService', ['$http', '$rootScope', 'API_URL', function($http, $scope, API_URL) { 
     var data = $http.get('data/selectAdUnits.json'); 

     return { 
     getAdFormats: function() { 
      console.log("inside function"); 
      return data; 
     }, 
     setAdFormats: function(value) { 
     } 
     } 
    }]); 
})(); 

Мой Оба контроллера с помощью служб добавил.

(function(){ 
    'use strict'; 

    angular.module('sspUiApp.controllers') 
    .controller('AdUnitFormatCtrl', ['$scope', '$state', 'AdUnitService', function ($scope, $state, AdUnitService) { 
     $scope.details = AdUnitService.getAdFormats(); 
    }]) 

    .controller('ModalDemoCtrl', ['AdUnitService', function ($scope, $uibModal, AdUnitService) { 
     $scope.open = function (size) { 
     // $scope.details = AdUnitService.getAdFormats(); 
     $scope.$modalInstance = $uibModal.open({ 
      scope: $scope, 
      templateUrl: 'views/select_ad_format.html', 
      size: size, 
     }); 
     }; 
     $scope.cancel = function() { 
     $scope.$modalInstance.dismiss('cancel'); 
     }; 

     $scope.details = AdUnitService.getAdFormats(); 
     alert($scope.details); 
    }]) 
})(); 

И HTML

<div id="selectAdFormats" ng-controller="ModalDemoCtrl"> 
    <div class="container"> 
    <div class="ad-format-section"> 
     <div class="row"> 
     <div class="col-lg-3 col-md-3 col-sm-2 col-xs-6 selectedAdFormatData" ng-repeat="frmt in details.adformat"> 
      <div class="row"> 
       <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12 text-center"> 
       <img ng-src="../images/{{ frmt.ad_image }}" ng-if="frmt.ad_image"/> 
       </div> 
      </div> 
      <div class="row"> 
       <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12 text-center"> 
       <span class="formatName">{{ frmt.name }}</span> 
       </div> 
      </div> 
      <div class="row"> 
       <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12 text-center"> 
       <span class="resSize">{{ frmt.size }}</span> 
       </div> 
      </div> 
      </div> 
     </div> 
    </div> 
    </div> 
</div> 
+0

Я не верю, что вы используете модальный экземпляр, как предполагались. Имея модальный открытый, вы вынуждены иметь доступ к своему охвату досрочно. Кроме того, казалось бы, вам понравится возможность использовать синтаксис 'resolve' для передачи зависимостей вместо передачи во всей области $. Я думаю, что это может помочь в этой ситуации и передать переменные, необходимые для модального из вызывающего контроллера, а не передавать данные через службу. – tylerwal

ответ

0
angular.module('sspUiApp.services') 
angular.module('sspUiApp.controllers') 

Ваша служба в другом модуле, поэтому вы не можете получить его, если вы объявите его в том же модуле, он должен работать

Вариант 2:

Включите ваш второй модуль sspUiApp.services в ваш отказ sspUiApp.controllers

для получения дополнительной информации: Angular js seperation to different modules in different js files


Update:

var data = $http.get('data/selectAdUnits.json'); 

return { 
    getAdFormats: function() { 
     console.log("inside function"); 
     return data; 
    }, 
    setAdFormats: function(value) {} 
} 

Проблема заключается в том, что данные asynchronious и не относиться к нему так:

$scope.details = AdUnitService.getAdFormats(); 
alert($scope.details); 

Вы пытаетесь предупредить обещание, вместо того, чтобы ждать его разрешения и оповещения о результате, если вы NGE его в следующем он должен работать:

AdUnitService.getAdFormats().then(function(details) { 
    alert(details);  
}); 

Этого путь углового будет ждать результата перед выполнением коды.

Более подробная информация о Угловых обещаниях здесь: https://docs.angularjs.org/api/ng/service/ $ д

+0

Зависимость для служб и контроллера уже упоминается в файле app.js. Я получаю данные Object Object, но не просматривается на странице. –

+0

@ user422831 Я обновил свой ответ –

Смежные вопросы