2014-08-27 99 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') 
     ); 
    } 
};