2017-01-30 11 views
4

Angular2:(click)属性(セキュリティ上の理由からonclickの呼び出し関数は許可されていないため)の関数呼び出しにパラメータとして*ngForループの値を渡そうとしています。イベントが私のアンカータグにあります。ngClickなしでAngular2でonclick内の関数呼び出しにパラメータとして値を渡す方法はありますか?

テンプレートコード:

<div *ngFor='let artist of artists'> 
    <a (click)="alert({{artist.artist_id}})" href="#">{{artist.artist_name}}</a> 
</div> 

コンパイル時エラー:

Got interpolation ({{}}) where expression was expected in [alert({{artist.artist_id}})] 

問題:

どのように私は(click)上の関数呼び出しにアーティストの値を渡すのですか?

すべて/すべてのお役に立ちました! :)

+0

は使用しないでください呼び出すことで '() 'または' [] 'とともに' {{}} '。どちらか一方が、どちらか一方が一緒ではない。 ( '()'と '[] 'は一緒に使用できます)。 –

+0

@GünterZöchbauerこのポインタをありがとう! '()'と '[] 'は一緒になって、いつも甘い' [(ngModel)]を思い出させます。 –

+0

あなたが知りたいと思うような場合に備えて、banana-in-a boxと呼ばれています:D-無効なバナナ・イン・バナナと混ぜないでください;-) –

答えて

7

イベントバインディングのクリック属性の変数に変数を渡すので、二重中括弧は必要ありません。そのため、これらの中カッコを削除して、期待どおりに動作します。

<div *ngFor='let artist of artists'> 
    <a (click)="alert(artist.artist_id)" href="#">{{artist.artist_name}}</a> 
</div> 

relevant documentationによると、あなただけのHTML要素タグの間と属性の割り当て内の値を挿入する時(イベント/プロパティはバインディングと混同しないように)補間を使用する必要があります。

<img src="{{pathUrl}}" /> 

しかし、あなたはむしろproperty binding(すなわち、[src]を使用した場合:

たとえば、あなたはそれ以外の場合は値が文字列として解釈されるだろう、この直接src属性の割り当てのための補間を使用する必要があります)srcよりも、それは変数として扱われると補間が必要とされないであろう。

<img [src]="pathUrl" /> 

同じことがあなたのケースのようにevent bindingに適用されます。言い換えれば

Günter in the comment aboveで述べたように、あなたが(すなわち、二重中括弧、{{}})、一緒に変数の展開で、(すなわち、()/[]/[()])、結合イベント/プロパティを使用する必要はありません。

+2

魅力的な@Josh!どうもありがとうございます!乾杯。ハッピーコーディング<3 –

1

単純補間を除去しalert(artist.artist_id)

+0

うん、それは働いた:)ありがとう! –

関連する問題