Javascript 通过模态实例更新字段后刷新数组的角度

Javascript 通过模态实例更新字段后刷新数组的角度,javascript,arrays,angularjs,Javascript,Arrays,Angularjs,要编辑对象详细信息,我使用ui引导模式指令。我使用同一控制器添加新实体或编辑现有实体。使用当前代码,当我添加一个新对象时,它会被推送到数组中。现在我在更新现有对象时遇到了一个问题。我当前的代码还将更新的对象推送到数组中,但不推送到数据库中,并在数组中显示旧记录和新记录的副本。刷新后,旧的数组当然会消失,因为控制器会再次查询实际数组 $scope.openSaleDlg = function (saleId) { var modalInstance = $modal.open({

要编辑对象详细信息,我使用ui引导模式指令。我使用同一控制器添加新实体或编辑现有实体。使用当前代码,当我添加一个新对象时,它会被推送到数组中。现在我在更新现有对象时遇到了一个问题。我当前的代码还将更新的对象推送到数组中,但不推送到数据库中,并在数组中显示旧记录和新记录的副本。刷新后,旧的数组当然会消失,因为控制器会再次查询实际数组

$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)
    }
);
})

我可以拥有.then do
$scope.sales=Sale.query()成功,但也许有更好的方法通过不再查询数据库来更新列表中的对象


您可以按照建议执行操作,并更新列表中存在的对象,而不是推送它。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
需要polyfill(或者您可以使用其他方法搜索数组)。

我建议您保存“sale”索引,如下所示:

 $scope.openSaleDlg = function (sale) {
    var modalInstance = $modal.open({
        backdrop: 'static',
        templateUrl: '/sales/detail.html',
        controller: 'SaleDetailCtrl',
        scope: $scope,
        resolve: {
            saleId: function () {
                return sale.Id;
            }
        }
    });
    $scope.saleIndex = $scope.sales.indexOf(sale)
    modalInstance.result.then(
        function (sale) {
    if($scope.saleIndex >-1){
      $scope.sales[$scope.saleIndex] = sale;
    }
    else{
        $scope.sales.push(sale)
    }

    }
);

你能不能通过id和它(如果它存在的话)来确定列表中的元素,而不是把它推到数组中?举个例子吧。不太熟悉这种方法。