2014-08-27 133 views
0

我创造了一套具有NG-重复表格选中的复选框(或广播)的指数,每种形式都有一个复选框(如果该事项可能会改变电台),我试图操纵检查的具体级别。所以,我所要做的是通过复选框(本身的NG-重复的索引的索引。让我告诉你我是什么意思角,得到以ng重复

<div class="saInstrcutionTableRow" ng-repeat="parent in listTable track by $index"> 
         <div class="saInstrcutionLeft"></div> 
         <!-- parent levels --> 
         <div class="saInstrcutionCRight saInstrcutionTitle"><div class="parentSub1"> <input type="checkbox" ng-model="levelPicker">{{parent.name}}</div></div> 

         </div> 

        </div> 

所以在这里,我只是重复名称在ng-model =“levelPicker”下面输入我在这个按钮之外按下了一个按钮,它使用了我设置的一个函数,它只需要通过复选框内的复选框的索引,所以它就是这样 -

<button type="button" class="resultsButton" ng-click="submitNewSub(Checkbox index here)">Submit</button> 

是否有角某种方式来针对选中的复选框和重复中获得其索引?我使用这个加在它的孩子。我已经尝试了一些东西,但我不知道如何重新直接获得它的索引(在角度内)。任何输入将不胜感激。谢谢!!

+0

你试过'$ index'? – 2014-08-27 17:48:39

+0

这个按钮是NG重复的外面,所以$指数将无法正常工作 – ajmajmajma 2014-08-27 17:50:03

回答

2

你可以捕捉到选定的指数withsomething这样

<input type="checkbox" ng-change="onChange({{$index}})" ... /> 

的onChange功能

$rootScope.onChange = function(idx) { 
    $rootScope.selectedIndex = idx; 
    }; 

然后使用selectedIndex任何你所需要的。这里有一个quick example

+0

你为什么在$ rootScope而不是$范围把? – marneborn 2014-08-27 18:45:36

+0

@marneborn $范围也可以工作 - 我刚刚创建了一个使用'app.run()'和'$ rootScope'的快速示例 – MPowerKC 2014-08-27 19:03:05

0

ng-repeat为每个项目创建一个新的作用域,所以父级不能直接访问任何checkbox设置的'levelPicker'。

最正确的方法可能是这样的:

$scope.listTable = [ 
    { name : 'a', selected: false }, 
    { name : 'b', selected: false }, 
    { name : 'c', selected: false } 
]; 
$scope.selectMe = function (index, previousValue) { 
    $scope.listTable[index].selected = !previousValue; 
}; 
$scope.submitNewSub = function() { 
    for (var i=0; i<$scope.listTable.length; i++) { 
     console.log($scope.listTable[i].name+ 
      ($scope.listTable[i].selected ? 
       ' is selected' : 
       ' is not selected') 
     ); 
    } 
} 

有了这个在html:

<input type="checkbox" ng-click="selectMe($index, levelPicker)" ng-model="levelPicker">{{parent.name}} 

或者你可以看看所有的子范围,并检查他们的levelPicker值:

$scope.submitNewSub = function() { 
    for(var cs = $scope.$$childHead; cs; cs = cs.$$nextSibling) { 
     console.log($scope.listTable[cs.$index].name+ 
      (cs.levelPicker ? 
       ' is selected' : 
       ' is not selected') 
     ); 
    } 
};