2016-10-11 84 views
0

如何更新函數中的ng-repeat項目? 我有以下代碼。 在我的HTML文件中的重複:角度 - 功能更新項目

<div ng-repeat='item in collection'> 
    <div class="product-item"> 
     <img src="{{item.image}}"/> 
     {{item.name}} 
     {{item.price}} 
     <a ng-href='' ng-click='showPricePopup(item)'>Update price</a> 
    </div> 
</div> 

我採用了棱角分明模式服務(http://dwmkerr.github.io/angular-modal-service/),並創造了控制器的以下功能:

$scope.showPricePopup = function(item){ 
     ModalService.showModal({ 
      templateUrl: "/winkelier/modal/price", 
      controller: "priceCtrl", 
      inputs: { 
       item: item 
      } 
     }).then(function(modal) { 
      modal.close.then(function(result) { 
       console.log("result", result.item); 
       $scope.updateItem(result.item); 
       item = result.item; 
      }) 
     }) 
    } 

在priceCtrl我注入$範圍,項目和關閉並將項目複製到範圍。

angular.module('myApp').controller('priceCtrl', ["$scope", "$http", 'item', 'close', function($scope, $http, item, close) { 

    $scope.modalitem = angular.copy(item); 
    $scope.savedmodalItem = angular.copy($scope.modalitem); 

我在這個控制器中創建一個close()cancel()功能也:

$scope.close = function(){ 
    close({ 
     item: $scope.modalitem 
    }, 500); 
} 

$scope.cancel = function(){ 
    $scope.modalitem = angular.copy($scope.savedmodalItem); 
    close({ 
     item: $scope.modalitem 
    }, 500);  
} 

的問題如下:當我從更新項目的一些屬性的,然後點擊按鈕cancel(),沒有任何反應。沒關係。但是,當我更改某個屬性並單擊close()時,該項目將通過$scope.updateItem()更新,但ng-repeat中的項目不會更新。

我該如何解決這個問題?

回答

1

既然你沒有修改原始,您需要使用新項目的陣列的該索引處更換的項目:

$scope.showPricePopup = function(item){ 
    var itemIndex = $scope.collection.indexOf(item); // get the index 
    ModalService.showModal({ 
     templateUrl: "/winkelier/modal/price", 
     controller: "priceCtrl", 
     inputs: { 
      item: item 
     } 
    }).then(function(modal) { 
     modal.close.then(function(result) { 
      console.log("result", result.item); 
      $scope.updateItem(result.item); 
      $scope.collection[itemIndex] = result.item; // replace the item at that index 
     }) 
    }) 
} 

記住數組是一堆內存指針。 item是一個局部變量,指向內存中的一個項目,但是當您執行item = result.item;時,您將設置本地item變量指向一個新地址而不是數組中的索引。

1

在和你親密的功能,你可以這樣做:

var close = function() { 
    // do what you do before 
    $scope.$apply(); 
} 

這一點。