2017-06-22 37 views
1
var product_id = $this.attr('data-id'); 
angular.forEach($rootScope.cartItems, function(value, key) { 
if (value.iProductID == product_id && key > -1){ 
    $rootScope.cartItems.splice(key, 1); 
    console.log($rootScope.cartItems); 
} 

在這裏,在上面的代碼中不影響,我是從陣列中除去對象元素,但使用spliceconsole.log()顯示正確的數據結果中刪除元素之後。但在我的HTML $rootScope.cartItems仍然顯示刪除的元素。變化範圍,以html

+0

您可以添加您的視圖的HTML,以及您的'cartItems'如何使用它?周圍是否有'ng-if'?爲什麼你需要使用'$ rootScope'順便說一句?最重要的是,由於範圍的原型繼承,您可以在視圖中看到其他數組,但不是您在$ rootScope中更改的數組。 –

回答

0

控制器中的某些代碼塊可能會重新填充購物車物品,因此更改不可見。

您可以設置一個活動來傾聽從購物車中刪除商品。

var product_id = $this.attr('data-id'); 
$rootScope.$broadcast('RemoveCartItem', product_id); 

監聽更改事件爲:

$rootScope.$on('RemoveCartItem', function (event, product_Id) { 
    angular.forEach($rootScope.cartItems, function(value, key) { 
    if (value.iProductID == product_Id && key > -1){ 
     $rootScope.cartItems.splice(key, 1); 
     console.log($rootScope.cartItems); 
    } 
}); 
1
$rootScope.cartItems.splice(key, 1); 
        $scope.$apply(function() { 
         $rootScope.cartItems = $rootScope.cartItems; 
        }); 

我找到了答案。謝謝你們的答案。