我从WebAPI获取数据并将其存储在范围可变的数组产品中。
$scope.products
我还有第二个范围数组
$scope.selectedFish = [];
我要做的是在products数组中找到一个产品,修改它并将其添加到selectedProducts数组中。
我在同一个控制器上声明了以下函数。
// Function to add a new fish to the selectedFish array
$scope.add = function() {
// Find existing fish from products list
var newFishToAdd = $filter('filter') ($scope.products, { Id: $scope.selectedProduct });
// Change the name property
newFishToAdd[0].FishName = $scope.selectProductName;
// Add new fish to the selected fish array
$scope.selectedFish.push(newFishToAdd[0]);
$scope.bindModel();
}
这确实有效,但是如果我使用不同的FishName值添加两次相同的产品,我会遇到困难,它会更新数组中所有输入最后一个FishName的selectedProduct的条目。
答案 0 :(得分:1)
它作为对象引用发生的是相同的。使用angular.copy()。
$scope.add = function() {
// Find existing fish from products list
var newFishToAdd = $filter('filter')($scope.products, { Id: $scope.selectedProduct });
var obj = angular.copy(newFishToAdd[0]);
obj.FishName = $scope.selectProductName;
// Add new fish to the selected fish array
$scope.selectedFish.push(obj);
$scope.bindModel();
}
答案 1 :(得分:0)
为此,您应该尝试使用angular.copy。正如角度文档中所述(https://docs.angularjs.org/api/ng/function/angular.copy)
angular.copy
创建源的深层副本,该副本应该是对象或数组。
如果未提供目的地,则会创建对象或阵列的副本。
如果提供了目标,则会删除其所有元素(对于数组)或属性(对象),然后将源中的所有元素/属性复制到该目标。
如果source
不是object
或array
(包括null
和undefned
),则会返回source
。
如果source
与destination
相同,则会引发exception
。