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