web-dev-qa-db-ja.com

ng-repeatインデックス値を関数に渡す

Ng-repeatで追加された特定の要素の$ index値をjavascript関数に渡す必要があります。私のコードサンプル:

<tr ng-repeat="cells in CouponsList.CellPhones">
<td><button  ng-click="doStuff($index+1)">{{cells.localVendorAddress}}</button></td>

現在、いくつかのボタンを追加しています。特定のボタンが押されたときに、その特定の$ indexをdoStuff($ index)関数に送信する必要があります。何か案が?

6
KBE

こちらをご覧ください: http://jsbin.com/yeweh/4/edit

<a href="" ng-repeat="s in students" ng-click="doit($index)">{{s.name}} - {{s.class}} </a>


var app = angular.module('app', []);



app.controller('firstCtrl', function($scope){

  $scope.doit= function(index){
    alert(index)

  }

  $scope.students = [
           {name: 'Aa_Student', class: 'A_Class'},
           {name: 'Ab_Student', class: 'A_Class'},
           {name: 'Ac_Student', class: 'B_Class'},
           {name: 'Ba_Student', class: 'B_Class'},
           {name: 'Bb_Student', class: 'C_Class'},
           {name: 'Bc_Student', class: 'C_Class'}];
});
8
sylwester

これが例です。

http://jsfiddle.net/bdmRs/

そこにあるものは問題ないように見えますが、doStuffの関数定義に何かが欠けている可能性があります。 $ scopeで次のように定義する必要があります。

$scope.doStuff = function(idx){
    alert(idx);
};
4
Hippocrates

Ng-clickを使用しているときは、呼び出された関数がコントローラーのスコープで宣言されていることを確認する必要があります。

したがって、関数名がdoStuff(index)の場合、これはコードのどこかに次のように定義されているはずです(以下はモジュール名とコントローラー名についての仮定です)。

var app = angular.module("MyModule", []);
app.controller("MyController", function($scope){

    $scope.doStuff = function(index){
        ... 
    }

}
1
rchawdry