2016-02-19 45 views
-2

我有一個控制器,它負責將產品項目添加到購物車。一切都很好,請求發送,獲取響應數據,但我無法更新HTML中的數據(請參閱圖像)。

我試圖把它與$scope.$apply(); $scope.$watch寫,但我從rootScope and $digestAngular JS無法更新數據

Error: [$rootScope:inprog] http://errors.angularjs.org/1.4.8/ $rootScope/inprog?p0=%24digest

越來越如果我不使用$應用,數據沒有更新。

enter image description here

這裏是我的代碼。

<a href="">Pr: {{cart.count}} <br/> Summ. {{ cart.summ | number:2 }}</a> 

shopApp.factory('shop', ['$http', function($http) { 
    return $http.get('/ajax/get_shop.ajax') 
    .success(function(data) { 
     return data; 
    }) 
    .error(function(err) { 
     return err; 
    }); 
}]); 

shopApp.controller('ShopController', ['$scope','$http','$timeout','shop', function($scope,$http,$timeout,shop) { 
$scope.cart = null; 
shop.success(function(data) { 
    $scope.cart = data;   
}); 
$scope.addToCart = function() { 
    var pr_price = parseInt(angular.element("#pr_price").val(),10); 
    var pr_id = angular.element("#pr_id").val(); 
    if(pr_price!= ""){ 
     return $http({ 
      method : 'POST', 
      url : '/ajax/add_to_cart.ajax', 
      data : 'pr_price=' + json_obj + '&pr_id='+pr_id , 
      headers : { 
       'Content-Type' : 'application/x-www-form-urlencoded' 
      } 
     }) 
     .success(function (shopping_data,status) { 
      if (status == 200){ 

       $scope.cart = shopping_data;  
       console.log(shopping_data);//everything is ok 


      }  
     }).error(function(err) { 
      return err; 
     }); 
    }  
}; 
}]); 
+2

可以提供樣品[plunkr(http://plnkr.co/edit/?p=preview)? – Grundy

回答

2

在棱角分明,就像你在這裏做你永遠不應該更新DOM:

angular.element("#rct_success_alert").html('<div><a href=""><h3>Product Successfully added to your cart</h3></div><div>'+shopping_data.count+' Items</a></div>'); 

而且你不需要apply這裏:

$scope.$apply(function(){ 
     $scope.cart = shopping_data; 
    }); 

只是爲它分配和角度將其綁定到模板:

$scope.cart = shopping_data; 

你的工廠可以更容易過多:

shopApp.factory('shop', ['$http', function($http) { 
    return $http.get('http://echo.jsontest.com/count/123/summ/234'); 
}]); 

我有created a JSBin調用一個JSON回聲服務器,如果您看不到結果,請在瀏覽器中轉到http://echo.jsontest.com/count/123/summ/234,並確保它不超過配額。

+0

整個問題是$ scope.cart = shopping_data;不更新數據 –

+1

這就是爲什麼您應該嘗試使用不是來自後端的數據結構來更新它,以便如果問題出現在JSON的控制器端/使用後端通信時。 –

+0

我試圖設置$ scope.cart = { count:123, summ:98877.234 },仍然沒有工作 –

0

的問題是在你的工廠,你要麼調用成功功能在服務控制器不是兩次。嘗試是這樣的:

shopApp.factory('shop', ['$http', function($http) { 

    var shop = {}; 

    shop.getCart = function() { 
     return $http.get('/ajax/get_shop.ajax'); 
    }; 

    return shop; 

}]); 

而在你ShopController

shop.getCart() 
    .success(function(data) { 
     $scope.cart = data;   
    }) 
    .error(function() { 
     // Do Something Cool Here 
    });