2014-07-06 88 views
0

編輯對象詳細信息我使用ui bootstrap模態指令。我使用相同的控制器添加新的實體或編輯已有的實體。用我當前的代碼添加一個新對象時,它會被推送到數組中。現在我在更新現有對象時遇到問題。我當前的代碼也將更新的對象推送到數組,但不是數據庫,並顯示我的舊記錄和數組中的新記錄的重複。刷新舊的消失後當然會消失,因爲控制器再次查詢實際的數組。通過模態實例更新字段後更新陣列的角度

$scope.openSaleDlg = function (saleId) { 
    var modalInstance = $modal.open({ 
     backdrop: 'static', 
     templateUrl: '/sales/detail.html', 
     controller: 'SaleDetailCtrl', 
     scope: $scope, 
     resolve: { 
      saleId: function() { 
       return saleId; 
      } 
     } 
    }); 

modalInstance.result.then(
    function (sale) { 
     $scope.sales.push(sale) 
    } 
); 

};

我可以有,然後做$scope.sales = Sale.query();成功,但也許有更好的方法來更新列表中的對象通過不再查詢數據庫?

enter image description here

+0

難道你不能只是[查找](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find)列表中的元素通過id和[extend ](https://docs.angularjs.org/api/ng/function/angular.extend)它是否存在,而不是推送到數組? – numbers1311407

+0

一個例子將不勝感激。不太熟悉這種方法。 – Vaelyr

回答

1

你可以做,就像你的建議,如果它存在,而不是推更新列表中的對象。 Angular會選擇改變並重新渲染。

喜歡的東西:

modalInstance.result.then(function (sale) { 
    var saleToUpdate = $scope.sales.find(function (existingSale) { 
    return existingSale.id == sale.id; 
    }); 

    if (saleToUpdate) { 
    angular.extend(saleToUpdate, sale); 
    } else { 
    $scope.sales.push(sale); 
    } 
}); 

注意Array#find將需要填充工具(或者你可以使用不同的方法來搜索陣列)。