2013-08-03 13 views
45

以下のようなスパンタグがあり、これをクリックするとコントローラ内の関数が呼び出されます。angularjsのng-click関数の要素の属性を取得する

HTML

<div class="row" ng-repeat="event in events"> 
    <div class="col-lg-1 text-center"> 
     <span class="glyphicon glyphicon-trash" data={{event.id}} ng-click="deleteEvent()"> 
     </span> 
    </div> 
</div> 

コントローラ

$scope.deleteEvent=function(){ 
    console.log(this); 
} 

私は、コントローラ機能のデータ属性の値を取得する必要があります。私はこのキーワードと$イベントを使ってみました。どちらも働かなかった。

助けてください。

答えて

78

はNGクリック機能に直接渡して試してみてください。

<div class="col-lg-1 text-center"> 
    <span class="glyphicon glyphicon-trash" data="{{event.id}}" 
      ng-click="deleteEvent(event.id)"></span> 
</div> 

その後、それはあなたのハンドラ内で利用可能であるべきである:

$scope.deleteEvent=function(idPassedFromNgClick){ 
    console.log(idPassedFromNgClick); 
} 

ここan example

+0

実際には、この全体のdivはng-repeat内にあります。ですから、ng-clickの中でevent.idを使用することはできません。おもう。 – Saravanan

+0

jsFiddleのリンクをチェックしてみました。「ngRepeat」の中の「ngClick」にパラメータを使用した例について、私の答えに追加しました。 – jandersen

+0

ありがとうございました。私はこれを昨日試して3時間以上過ごしました。それは仕事をdintします。私は間違いをしたかもしれない。とにかく今はそれが動作し、フィドルに感謝します。それは助けになった。 – Saravanan

78

さらにシンプル、合格です$eventオブジェクトをng-clickに割り当てると、イベントプロパティにアクセスできます。例として:exampleDataを返します

var dataValue = obj.target.attributes.data.value; 

<a ng-click="clickEvent($event)" class="exampleClass" id="exampleID" data="exampleData" href="">Click Me</a> 

あなたclickEvent() = function(obj) {}関数内で、あなたは、このようにdata値にアクセスすることができます。

ここにはfull jsFiddleがあります。

+0

jsFiddleはChromeではうまく動作しますが、FireFoxではうまく動作しません。 – Michiel

+0

これをキャッチするためにありがとう。私は 'obj.target'を使ってjsFiddleをより良い解決策に変えました。 –

+8

私はあなたが 'obj.target.getAttribute(" data ")を実行できることを知りました。もっと読みやすく見えるIMO、js fiddleここ:http://jsfiddle.net/zpApT/ –

3

ブレットDeWoodyの答えに加えて:(更新されるようになりました)

var dataValue = obj.srcElement.attributes.data.nodeValue; 

IE(9+)とChromeで動作罰金が、FirefoxはsrcElementプロパティを知りません。 私が見つかりました:

はIE、ChromeとFFで
var dataValue = obj.currentTarget.attributes.data.nodeValue; 

作品、私はサファリをテストするものではありませんでした。

+1

ありがとうMichiel。私はこれに対処するためにjsFiddleを更新しました。私はより普遍的な 'objを使用しています。target'プロパティを使用して属性を取得します。 –

+1

はいBrett、私はあなたのコードを更新する、ターゲットを使用する方が良いと同意します、ありがとう! – Michiel

関連する問題