次のようなディレクティブがあるとしましょう。
directive('attachment', function() {
return {
restrict: 'E',
controller: 'AttachmentCtrl'
}
})
つまり、次のような「添付ファイル」要素のリストを作成できます。
<attachment ng-repeat="a in note.getAttachments()">
<p>Attachment ID: {{a.id}}</p>
</attachment>
note.getAttachments()
上記のスニペットで、が単純なjavascriptオブジェクトハッシュのセットを返すと仮定しましょう。
ディレクティブのコントローラーを設定したので、そのコントローラーのスコープ関数への呼び出しをインラインで含めることができます。
コントローラは次のとおりです。
function AttachmentCtrl($scope) {
$scope.getFilename = function() {
return 'image.jpg';
}
}
そして、その関数の呼び出しをインラインで含める場合の変更されたHTMLは次のとおりです$scope.getFilename
(新しい2番目の段落)。
<attachment ng-repeat="a in note.getAttachments()">
<p>Attachment ID: {{a.id}}</p>
<p>Attachment file name: {{getFilename()}}
</attachment>
ただし、これは役に立ちません。これにより、各添付ファイルのファイル名と同じ文字列「image.jpg」が出力されます。
実際には、添付ファイルのファイル名は添付ファイルIDに基づいています。したがって、IDが「2」の添付ファイルのファイル名は「image-2.jpg」になります。
したがって、getFilename
関数を変更する必要があります。それを修正しましょう:
function AttachmentCtrl($scope) {
$scope.getFilename = function() {
return 'image-' + a.id + '.jpg';
}
}
しかし、待ってください—これは機能しません。スコープに変数はありませんa
。a
のおかげで変数をインラインで使用できますng-repeat
が、そのa
変数はディレクティブにバインドされたスコープでは使用できません。
だから問題は、どうすればそれをa
スコープで利用できるようにするのかということです。
注意:この特定の例では、image-{{a.id}}.jpg
インラインで印刷できることに気づきました。しかし、それは質問に答えません。これは非常に単純化された例です。実際には、getFilename
関数は複雑すぎてインラインで印刷できません。
編集:はい、getFilename
引数を受け入れることができます、そしてそれはうまくいくでしょう。しかし、それも質問に答えません。a
回避策なしで、インラインで使用せずにスコープに入ることができるかどうかを知りたいです。
たとえば、コントローラーに直接注入して、次のように記述する方法があるかもしれません。
function AttachmentCtrl($scope, a) { ... }
しかし、どこからそれを渡すのでしょうか?ディレクティブ宣言に追加できるものはありますか?たぶん、ng-repeatの隣に追加できるng- *属性ですか?可能かどうか知りたいだけです。