AngularJS禁用ng-repeat中的一个下拉列表

时间:2014-05-18 09:20:11

标签: javascript angularjs

我的HTML代码中有以下ng-repeat

<div ng-repeat="a in items">
  <div>
    <span>{{a.name}}</span>
  </div>
  <div>
    <select ng-model="a.c_id" ng-options="d.c_id as d.description for d in loclist" ng-disabled="display" ng-change="selected(a.c_id)">
    </select>
  </div>

然后在我的控制器中我有:

$scope.display = false;
$scope.selected = function (value) {
    $scope.te = value;
    if ($scope.te == 3) {
        $scope.display = true;
    }        
};

我面临的问题是当我在下拉列表中更改选择时,它应该禁用或启用基于值的下拉列表。但是,当我更改其中一个值为3的下拉列表中的选择时,所有下拉列表都会更改为禁用状态而不是特定值。

请告诉我如何修复此代码,以便在ng-repeat显示所有行后我更改其中一行的下拉列值时,它会禁用该特定行,而不是禁用所有行中的所有下拉列表

1 个答案:

答案 0 :(得分:1)

Angular ng-repeat 创建从父作用域继承的子作用域。在您的情况下,您的所有ng-repeat范围都会从父作用域继承display属性。因此,当此属性更改时,它会反映在所有范围上。

尝试使用this代替$scope来访问ng-repeat的当前范围:

$scope.selected = function (value) {
     this.te = value;
     if (this.te == 3) {
         this.display = true;
     }        
};