Javascript 通过模态实例更新字段后刷新数组的角度
要编辑对象详细信息,我使用ui引导模式指令。我使用同一控制器添加新实体或编辑现有实体。使用当前代码,当我添加一个新对象时,它会被推送到数组中。现在我在更新现有对象时遇到了一个问题。我当前的代码还将更新的对象推送到数组中,但不推送到数据库中,并在数组中显示旧记录和新记录的副本。刷新后,旧的数组当然会消失,因为控制器会再次查询实际数组Javascript 通过模态实例更新字段后刷新数组的角度,javascript,arrays,angularjs,Javascript,Arrays,Angularjs,要编辑对象详细信息,我使用ui引导模式指令。我使用同一控制器添加新实体或编辑现有实体。使用当前代码,当我添加一个新对象时,它会被推送到数组中。现在我在更新现有对象时遇到了一个问题。我当前的代码还将更新的对象推送到数组中,但不推送到数据库中,并在数组中显示旧记录和新记录的副本。刷新后,旧的数组当然会消失,因为控制器会再次查询实际数组 $scope.openSaleDlg = function (saleId) { var modalInstance = $modal.open({
$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和它(如果它存在的话)来确定列表中的元素,而不是把它推到数组中?举个例子吧。不太熟悉这种方法。