1

当我在阅读 Pluralsight 的基础知识时AngularJS,我对自己$http + $q.defer()没有按应有的工作方式感到困惑。似乎即使deferred变量已经解决,更改仍然没有级联到控制器上。

我的观点:

 <li class="row" ng-repeat="item in jsonData.Items">

我的服务:

mediaApp.factory('ServiceData', function ($http,$q) {
        return{
            getJson: function ($scope) {
                var deferred = $q.defer();

                $http(
                {
                    method: 'GET',
                    url: url
                }).
                        success(function (data, status, header, config) {


                            $timeout(function () {
                                deferred.resolve(data);
                            });
                        })
        }

我的控制器

$scope.jsonData = ServiceData.getJson($scope);

同时,这些代码行在控制器上工作:

ServiceData.getJson($scope).
       then(function (data) {
           $scope.jsonData = data;
       });

有人可以启发我吗?我相信解决方法已经是正确的,但我想了解为什么代码的某些实现不能按预期工作。

是什么赋予了?

4

1 回答 1

1

你没有从getJson

mediaApp.factory('ServiceData', function ($http, $q) {
    return {
        getJson: function ($scope) {
            var deferred = $q.defer();

            $http({
                method: 'GET',
                url: 'json.json'
            }).
            success(function (data, status, header, config) {
                deferred.resolve(data);

            })
            /* return the promise*/
            return deferred.promise
        }
    }
})

因为$http返回一个承诺......你可以在不创建自己的延迟的情况下做同样的事情,只需返回$http调用

DEMO

于 2013-11-02T14:46:13.573 回答