ディレクティブ定義内には、$elementと$attrsにアクセスするためのAPIがあるため、ディレクティブが呼び出された要素を参照することができます。ng-classなどの標準ディレクティブを使用してカスタム関数を呼び出すときに$elementと$attrsにアクセスするにはどうすればよいですか?
編集:これは慣用的なアプローチではないことを理解しています。この質問は、ラピッドプロトタイプに当てはまります。これは、Angularの多くの機能に最適です。持続可能性、関心の分離などに関するものだけではありません。私の主な関心事は速度です。したがって、組み込みのディレクティブとクイックコントローラーメソッドを使用して何かをすばやく実行できることは、実際には美徳であり、将来的にはより完全で適切な実装を行う機会を得ることができます...
この場合、この投稿とこの投稿のよう.active
に、の値に基づいて、nav要素にコンテキストクラスを追加しているだけです。ただし、これらの例では、呼び出し元の関数への引数として、属性の内容のコピーを明示的かつ冗長に渡す必要があります。しかし、プログラムで内部から属性にアクセスし、同一のコンテンツを引数として重複して渡すことを回避する方法はありませんか?$location.path()
href
getClass()
ng-class
href
getClass()
たとえば、getClass()
私が想像したとおりの機能を備えたコントローラーは、次のように機能します。
function navCtrl($scope, $routeParams) {
$scope.getClass = function($element, $attrs) {
if ($location.path().substr(0, path.length) == $attrs.href) {
return "active"
} else {
return ""
}
}
}
次に、次のように簡単かつエレガントに呼び出すことができます。
<a ng-class="getClass()" href="/tasks">Tasks</a>
それよりも:
<a ng-class="getClass('/tasks')" href="/tasks">Tasks</a>
(別のオプションはこれを行うカスタムディレクティブを作成することですが、今のところ、ディレクティブによって呼び出されたコントローラー関数内から$attrsや$elementにアクセスできるかどうかを調べたいと思います。ありがとう!)