ステージを設定するには - これは、単純な属性をバインドできる単一のスコープ内では発生しません。フェードイン/フェードアウトしたい要素はコントローラー内にありません。ng-app (rootScope) 内にあります。さらに、クリックされたボタンは、ルートから約 3 つの子の深さの子スコープにあります。
これが私が現在これを解決している方法です:
HTML (ルート スコープにある):
<ul class="nav-secondary actions"
darthFader fadeDuration="200"
fadeEvent="darthFader:secondaryNav">
darthFader は私のディレクティブです。
指令:
ディレクティブ('darthFader',
function() {
return {
restrict: 'A',
link: function($scope, element, attrs) {
$scope.$on(attrs.fadeevent, function(event,options) {
$(element)["fade" + options.fade || "In"](attrs.fadeduration || 200);
});
}
}
})
ここでは、イベント バスを介して渡されるオプションに応じて (またはデフォルトで fadeIn/200ms に設定される)、fadeIn または fadeOut を呼び出す特定の要素に固有のイベント ハンドラーを作成しています。
次に、$rootScope からイベントをブロードキャストして、このイベントをトリガーします。
$rootScope.$broadcast('darthFader:secondaryNav', { fade: "Out"});
これは機能しますが、このディレクティブのすべてのインスタンスに対してイベント リスナーを作成することに夢中になっているわけではありません (画面上に darthFader が多すぎるとは思いませんが、それは私が確立するパターンのためです)。ビューの属性をコントローラーとディレクティブの両方のイベントハンドラーと結合することにも夢中ではありませんが、現在、secondary-nav をラップするコントローラーがないため、secondaryNav を $ にバインドする必要があります。 rootScope も好きではありません。だから私の質問:
- ディレクティブをインスタンス化するたびにイベント ハンドラーを作成せずにこれを行う方法はありますか? (要素のステートフルなリストを保存するサービスでしょうか?)
- ビュー、コントローラー、ディレクティブをどのように分離すればよいですか?
- 私が見逃している他の明らかな質問はありますか?
乾杯!