我有一个问题,当我删除一个选项并尝试隐藏选择以防选择为空时会出错。
这是我的fiddle
请注意,当您删除x然后y时一切都很好。
然而,当您首先选择y时,由于某种未知原因,它会在您的选择中弹出一个空白选项。
更奇怪的是,当您从div中删除ng-if="permissionSelect"
时,该错误不会发生!!!
我错过了什么?这是一个错误吗?这假设发生了吗?
EDIT1:
使用ng-show
解决了这个问题,我仍然想知道wtf发生了。
答案 0 :(得分:0)
这是一个有趣的问题。这与ngIf
指令创建从基础范围继承的新范围有关。由于您使用模型permissionsSelect
的原始属性,因此它会丢失与初始范围列表的连接。您可以使用对象引用来修复它:
$scope.permissionsList = [{name:'x'},{name:'y'}];
$scope.permissions = {};
$scope.permissions.select = $scope.permissionsList[0]; // Initial default value for the select
$scope.removeOption = function(option) {
var index = $scope.permissionsList.indexOf(option);
$scope.permissionsList.splice(index, 1);
$scope.permissions.select = $scope.permissionsList[0];
}
请注意,使用ngIf删除元素时,其范围将被销毁,并且在还原元素时会创建新范围。在ngIf中创建的作用域使用原型继承从其父作用域继承。这一点的一个重要含义是,如果在ngIf中使用ngModel绑定到父作用域中定义的javascript原语。在这种情况下,对子作用域内的变量所做的任何修改都将覆盖(隐藏)父作用域中的值。