Контроллер AngluarJS возвращается на завод, но не отображается в шаблоне - PullRequest
0 голосов
/ 12 сентября 2018

Мой контроллер вызывает фабрику обслуживания, я вижу, что фабрика успешно выполняет вызовы API и возвращает результаты контроллеру, но назначенный контроллеру шаблон не отображает результаты.

Фабрика:

.factory("clubService", function($http,$q) {
  var clubs= [] ;
  function clubsAll() {
    clubs = [] ;
    setVars() ; // function to set baseUrl/headers, etc   
    var dataObj = [{"type":1,"userID":userData.user_ID}]
    var req = {
      method: 'POST',
      url: baseUrl ,
      headers: headers,
      data: JSON.stringify(dataObj)
    }
    return $http(req)
    .then(function(response){
      clubs = response.data ;
      return clubs ;
    }).catch(function(err) {
      errMgmt("services/apiCall",700,err.code+", "+err.msg) ;
    });
  }

  return {
    all: function() {
      return clubsAll() ;
      //return clubs ;
    }
}) ;

Контроллер:

.controller('ClubCtrl', function($scope,$state,clubService) {

  $scope.clubs = clubService.all() ;
  console.log($scope.clubs) ;   // 'clubs' is getting populated in console.
})

И в моем HTML

   <div ng-if="clubs.length == 0">
      <img ng-src="img/loader.gif">
   </div>
   <div ng-if="clubs.length > 0">
      <div ng-repeat="club in clubs">
         {{club.Name}}
      </div>
   </div>

Но в моем HTML ничего не отображается, ничего, что ссылается на clubs, не отображается, нг-Если все еще закомментировано, нет ng-repeat display.

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

В методе clubService, clubsAll () вы на самом деле возвращаете обещание при указании этой строки

return $http(req)
    .then(function(response){
      clubs = response.data ;
      return clubs ;
    }).catch(function(err) {
      errMgmt("services/apiCall",700,err.code+", "+err.msg) ;
    });

Это обещание может быть выполнено (успешно) или отклонено (ошибка), и если вы хотите получить данные клубов по этому обещанию, вам нужно цепочка в логике вашего контроллера при обратном вызове успеха обещания (.then)

.controller('ClubCtrl', function($scope,$state,clubService) {

    clubService.all().then(function(response){
        $scope.clubs = response;
    });
})
0 голосов
/ 12 сентября 2018

Я разобрался, мне нужно дождаться обещания вернуться в контроллер.

.controller('ClubCtrl', function($scope,$state,clubService) {

  clubService.all()
  .then(function(response) {
     $scope.clubs = response ;
     console.log($scope.clubs) ;   // 'clubs' is getting populated in console.
   }) ;
})
...