AngularJS没有绑定模板的承诺

时间:2013-12-12 18:08:56

标签: angularjs angularjs-service

我的服务:


这是错误导致错误的原因之一:

        getAll: function(url) {
         deferred.resolve($http({  <--- deferred.resolve should not have been here
                method: 'GET',
                url: url,
                contentType: "application/json; charset=utf-8",
                cache: true,
                headers: { 'Content-Type': 'application/x-www-form-urlencoded' }                    
            }));
            return deferred.promise;
        },

应该是:

        getAll: function (url) {
            $http({
                method: 'GET',
                url: url,
                contentType: "application/json; charset=utf-8",
                cache: true,
                headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
            }).success(function (data) {
                deferred.resolve(data);
            });
            return deferred.promise;

我的控制器:

这是错误导致错误的原因之一:

     // $scope.PassengerVehicles = crudSvc.getAll('/_json/PassengerVehicles.js');
     // should have been:
      crudSvc.getAll('/_json/PassengerVehicles.js').then(function (data) {
        $scope.PassengerVehicles = data;
    });

我的模板:

       <ul data-ng-repeat="passVeh in PassengerVehicles">
          <li>{{passVeh.itemId}}</li>
        </ul>

这是我的傻瓜,已经更正:

AngularJS not binding promise to template

比你第四次!!

1 个答案:

答案 0 :(得分:2)

您有getAll()函数立即解析并向控制器返回一个承诺。您需要允许getAll()函数执行并在结算时处理承诺:

getAll: function(url) {
            return $http({
                method: 'GET',
                url: url,
                contentType: "application/json; charset=utf-8",
                cache: true,
                headers: { 'Content-Type': 'application/x-www-form-urlencoded' }                    
            });
        },

并在控制器中:

    crudSvc.getAll('/_json/PassengerVehicles.js').success(function (vehicles){
        $scope.PassengerVehicles = vehicles;
      });

不同之处在于您将返回一个立即解决并返回另一个承诺的承诺。您只需要解析http承诺。