【问题标题】:AngularJS Controller Factory rest JSONAngularJS 控制器工厂休息 JSON
【发布时间】:2016-08-07 08:39:16
【问题描述】:

我正在尝试从多个控制器调用工厂。这个工厂获取 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"}];
                });
        }
    }
});

【问题讨论】:

    标签: javascript angularjs json rest


    【解决方案1】:

    为了从工厂函数getObjects 检索数据,您应该从getObjects 函数返回一个promise,并将.then 函数链接到链promise。在控制器内部,您可以使用 .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;
      });
    });
    

    【讨论】:

    • 很高兴听到这个消息。谢谢;)
    猜你喜欢
    • 1970-01-01
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-12
    相关资源
    最近更新 更多