2016-08-07 10 views
2

複数のコントローラからファクトリを呼び出そうとしています。このファクトリはJSONデータを取得します。私はコントローラから直接呼び出すことを試みたときに成功することができます。今、私はファクトリを追加しました。コンソールにエラーはありませんが、何も画面に表示されません。ここでは、コードは次のようになります。AngularJS Controller Factory rest JSON

HTMLテンプレート:

<!-- Schools --> 
<div class="row"> 
    <h3 class="text-center">Schools and Associations</h3> 
    <ul class="gallery gallery1" ng-controller="SchoolsCtrl"> 
     <li ng-repeat="school in schools" class="card"> 
      <a ng-href="{{school.url}}" target="_blank"> 
       <img ng-src="{{school.thumbUrl}}" class="img-responsive"> 
       <p class="text-center">{{school.name}}</p> 
       <p class="text-center">{{school.time}}</p> 
      </a> 
     </li> 
    </ul> 
</div> 

controller.js:

var mainApp = angular.module('mainApp', ['bootstrapLightbox', 'ngAnimate']); 

mainApp.controller('CompaniesCtrl', function($scope, GalleryService) { 
$scope.companies = GalleryService.getObjects('app/common/companies.json'); 
}); 

mainApp.controller('WorksCtrl', function($scope, GalleryService) { 
$scope.works = GalleryService.getObjects('app/common/freelance-projects.json'); 
}); 

mainApp.controller('SchoolsCtrl', function ($scope, GalleryService) { 
$scope.schools = GalleryService.getObjects("app/common/schools.json"); 
}); 

service.js:

mainApp.factory('GalleryService', function ($http) { 
    return { 
     getObjects: function (jsonUrl) { 
      $http.get(jsonUrl) 
       .success(function (data) { 
        return data; 
       }) 
       .error(function (data, status, error, config) { 
        return [{heading:"Error", description: "Could not load json data"}]; 
       }); 
     } 
    } 
}); 

答えて

1

ファクトリ関数からデータを取得するためにgetObjectsgetObjectsの機能をとの約束を返す必要がありますは、約束を連鎖させる機能です。コントローラーの内部では、応答を受信するために.thenファンクションコールバックでgetObjectsコールを行うことができます。

工場

mainApp.factory('GalleryService', function ($http) { 
    return { 
     getObjects: function (jsonUrl) { 
      return $http.get(jsonUrl) 
       .then(function (resp) { 
        return resp.data; 
       }, function (res) { 
        return [{heading:"Error", description: "Could not load json data"}]; 
       }); 
     } 
    } 
}); 

コントローラ

var mainApp = angular.module('mainApp', ['bootstrapLightbox', 'ngAnimate']); 

mainApp.controller('CompaniesCtrl', function($scope, GalleryService) { 
    GalleryService.getObjects('app/common/companies.json').then(function(data){ 
    $scope.companies = data; 
    }); 
}); 
+0

それを聞いて喜んで。ありがとう;) –

関連する問題