我有一个ng-repeat,每个项目都有一个选择。
用户可以选择一个值(触发将对象推入数组的函数),但是他们也可以改变主意,在这种情况下代码只是用新值推送第二个对象,复制第一个对象
我怎样才能真正删除现有值,每次更换时只留下最后一个值?
这是我的HTML:
<select ng-change="insertproduct(pa.nom, basket)" ng-model="basket">
<option ng-repeat="select in numberofproducts">{{select}}</option>
</select>
我的javascript:
$scope.numberofproducts = [1,2,3,4,5,6,7,8,9,10]
$scope.singleorder = [];
$scope.insertproduct = function(nom, basket){
$scope.numero = {
'producte': nom,
'numero': basket
};
$scope.singleorder.push($scope.numero);
console.log($scope.singleorder);
}
想法是创建一个条件,在该条件中,如果数组包含参数'producte'等于新参数的对象,则删除现有对象并推送新对象。
任何提示?
答案 0 :(得分:0)
首先,使用findIndex方法检查singleorder
数组中是否已存在具有相同属性的对象。
function duplicateOrder(order) {
return order.producte === nom;
}
var index = $scope.singleorder.findIndex(duplicateOrder);
注意:findIndex的browser support是有限的; Internet Explorer不支持它。
然后使用splice删除项目:
if(index > -1){
$scope.singleorder.splice(index, 1);
}
然后您可以推送新的。
您还应该清理您的编码风格:不要混用法语和英语,并使用 camelCase 或 snake_case 你的功能是提高可读性。
答案 1 :(得分:0)
观察:
ng-repeat
。index
是否已经存在,您可以轻松删除之前的元素。<强>样本强>
var myApp = angular.module('myApp',[]);
myApp.controller('MyCtrl',function($scope) {
$scope.numberofproducts = [1,2,3,4,5,6,7,8,9,10]
$scope.newArray = [];
$scope.insertproduct = function(basket) {
var prevIndex = $scope.newArray.indexOf(basket);
if(prevIndex > -1) {
$scope.newArray.splice(prevIndex, 1);
} else {
$scope.newArray.push(basket);
}
console.log($scope.newArray);
}
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp" ng-controller="MyCtrl">
<select ng-change="insertproduct(basket)" ng-model="basket" ng-options="select for select in numberofproducts">
</select>
</div>