Angularjs使用ng-if错误选择删除选项

时间:2014-11-18 10:49:21

标签: angularjs

我有一个问题,当我删除一个选项并尝试隐藏选择以防选择为空时会出错。

这是我的fiddle

请注意,当您删除x然后y时一切都很好。

然而,当您首先选择y时,由于某种未知原因,它会在您的选择中弹出一个空白选项。

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

我错过了什么?这是一个错误吗?这假设发生了吗?

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

1 个答案:

答案 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]; 
}

演示:http://jsfiddle.net/de564uew/3/

这是documentation

的摘要
  

请注意,使用ngIf删除元素时,其范围将被销毁,并且在还原元素时会创建新范围。在ngIf中创建的作用域使用原型继承从其父作用域继承。这一点的一个重要含义是,如果在ngIf中使用ngModel绑定到父作用域中定义的javascript原语。在这种情况下,对子作用域内的变量所做的任何修改都将覆盖(隐藏)父作用域中的值。