Angularjs选择带有ng的选项删除,如果有错误

Angularjs选择带有ng的选项删除,如果有错误,angularjs,Angularjs,我有一个问题,当我删除一个选项,并试图隐藏选择的情况下,选择是空的,错误了 这是我的 请注意,当删除x和y时,一切都正常 但是,当您第一次选择y时,由于未知原因,它会在您的选择中弹出一个空白选项 更奇怪的是,当您从div中删除ng if=“permissionSelect”时,该错误不会发生 我错过了什么?这是虫子吗?这会发生吗 EDIT1: 使用ng show解决了这个问题,但我仍然想知道wtf发生了什么。这是一个有趣的问题。这与以下事实有关:ngIf指令创建从基本范围继承的新范围。由于您正在

我有一个问题,当我删除一个选项,并试图隐藏选择的情况下,选择是空的,错误了

这是我的

请注意,当删除x和y时,一切都正常

但是,当您第一次选择y时,由于未知原因,它会在您的选择中弹出一个空白选项

更奇怪的是,当您从div中删除
ng if=“permissionSelect”
时,该错误不会发生

我错过了什么?这是虫子吗?这会发生吗

EDIT1:
使用
ng show
解决了这个问题,但我仍然想知道wtf发生了什么。

这是一个有趣的问题。这与以下事实有关:
ngIf
指令创建从基本范围继承的新范围。由于您正在为模型
权限选择
使用primitive属性,因此它会断开与初始范围列表的连接。您可以使用对象引用来修复它:

$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原语。在这种情况下,对子范围内的变量所做的任何修改都将覆盖(隐藏)父范围内的值


那么,为什么它从一开始定义的第一个选项就可以正常工作呢?还有,为什么空白选项呢?请注意,您仍然可以删除它,它将正常工作,但它只是以某种方式引用它,并出于某种原因添加了一个空白选项。您还可以注意到,在选择带有空白选项的选项之后,它将删除空白选项。它与
ngIf
作用域及其应用克隆元素的方式有关。但总的来说——相当复杂的机制,在本例中我仍然无法实现。这解释了为什么它可以与
ngShow
一起工作:因为
ngShow
不会克隆元素并简单地显示/隐藏它们。因此,不存在任何越界和范围骗局。