2016-08-07 18 views
2

Ich versuche, eine Fabrik von mehreren Controllern aus aufzurufen. Diese Fabrik erhält JSON-Daten. Ich kann es schaffen, wenn ich direkt vom Controller aus angerufen habe. Jetzt habe ich nur eine Fabrik hinzugefügt und es gibt keinen Fehler in der Konsole, aber nichts kommt zum Bildschirm. Hier ist der Code:AngularJS Controller Factory Rest JSON

HTML-Vorlage:

<!-- 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"}]; 
       }); 
     } 
    } 
}); 

Antwort

1

Um Daten von Factory-Funktion abrufen getObjects Sie sollten ein Versprechen von getObjects Funktion mitzurückgebenFunktion, um Versprechen zu verketten. Innerhalb eines Controllers können Sie getObjects Anruf mit .then Funktionsrückrufe machen, um eine Antwort zu erhalten.

Fabrik

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"}]; 
       }); 
     } 
    } 
}); 

-Controller

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

erfreut, das zu hören. Vielen Dank ;) –