AngularJS & lt; select>使用ng-model和ng-options在元素删除时被破坏
AngularJS <select> with ng-model and ng-options gets broken on element delete
我在v1.3.0-beta.3中有一个选择器:
<select
ng-model='selectedPassport'
ng-change="selectPassport(selectedPassport)"
ng-options="passport.number for passport in passports"
required>
</select>
我有一个按钮与ng-click从护照数组中删除元素:
// delete button handler
$scope.deletePassport = function () {
var delIdx = $scope.passports.indexOf($scope.selectedPassport);
var idx = delIdx;
if (idx > 0) {
idx--;
}
$scope.passports.splice(delIdx,1);
$scope.selectedPassport = $scope.passports[idx];
};
// if I don't do that, I wouldn't be able to use $selectedPassport in my code
$scope.selectPassport = function (pass) {
$scope.selectedPassport = pass;
}
我想在删除当前护照后选择以前的护照。但我得到的是空护照。在DOM模型中,它对应于value="?"的选项,尽管ng-model指向ng-options中的有效元素。我该如何克服?
问题是$scope.selectedPassport
将是一个对象,在这种情况下,indexOx
在这个表达式
var delIdx = $scope.passports.indexOf($scope.selectedPassport);
将无法找到相应的数组索引。我认为你可以这样修改:
$scope.deletePassport = function() {
var delIdx = -1;
for (var i = 0; i < $scope.passports.length; i++) {
if ($scope.passports[i].number === $scope.selectedPassport.number) {
delIdx = i;
break;
}
}
if (delIdx > -1) {
$scope.passports.splice(delIdx, 1);
$scope.selectedPassport = $scope.passports[delIdx];
}
};
概念证明:http://plnkr.co/edit/E1BAwS6JHGzQs4gMct7R?p=preview
我把你的例子变成了一个普朗克的例子,它似乎是有效的。你一定是忘记了什么,或者把删除按钮弄乱了?
http://plnkr.co/edit/Rs173vmhu1bBubvRS18j这个元素中出现的ng-if=属性导致了这个问题。我没有把ng-if放入源示例中,因为我认为它与问题无关。每次调用deletePassport()时,angular会自动重新计算ng-if条件,并重新创建select元素,从而丢失选择。用ng-show代替ng-if解决
相关文章:
- 从组件状态的数组中删除元素
- 从数组中删除元素的最佳方法是:javascript/jquery
- 正则表达式条件来删除元素
- 使用javascript删除元素时出现的问题
- 当会话存储阵列中存在大量元素时,如何从中删除元素
- 从角度数组中删除元素
- AngularJs localStorage在循环中删除元素
- 在使用jquery插入之前删除元素
- 如何删除元素列表中的类并添加到另一个元素 Jquery.
- 更新分组条形图(转换或删除元素组)
- 向下滚动后如何用同一类逐个删除元素
- 如何防止 jQuery 事件在删除元素时冒泡
- 从jQuery对象中删除元素
- 如何删除元素的结束标记,添加一些文本,然后重新添加标记
- 从画布中删除元素
- 如何解析html以删除元素并只返回其位置的标题
- 使用 V8 从密集数组中删除元素的最佳方法是什么
- 如何使用jquery删除元素
- 根据成员属性从数组中删除元素
- 从中删除元素'的父元素,并将其附加到其他元素