少し複雑なので、我慢してください。3 層のディレクティブがあります。
- 最上位レイヤー - ポップアップ ディレクティブ
- 中間層 -
switch-pane
ディレクティブ * - 最下層 - いくつかのビューの 1 つ
最上層は、アプリのウィザードを表すポップアップです。中間層は、ビューのスタックとして機能する私が作成したディレクティブです。ビューを「プッシュ」および「ポップ」できます。「トップ」ビューが表示され、残りは押しのけられてぼやけています。最下層は、通常は互いに関連のない一連のビューでありswitch-pane
、ユーザーの操作に応じて動的に読み込まれて表示されます。
これまでのところ、これは機能しますが、現在、最上位レイヤーには、表示$scope
する必要があるすべてのビューを表す配列プロパティがあり、属性としてディレクティブswitch-pane
に渡され、ディレクティブはそれを使用して更新します。これは問題ありませんが、十分ではないと思います。ディレクティブ自体でビューのスタックを管理し、API のみを公開するようにしたいと考えています。switch-pane
switch-pane
$watch
switch-pane
push
pop
ここに私が考えたいくつかの方法があります:
$broadcast
/を使用$emit
- 最上位レイヤーは「プッシュ」イベントを $broadcast し、switch-pane
それをキャッチして必要なことを行います- サービスを使用する (「プッシュ」イベントをサブスクライブして起動する - これは使用と同じです
$broadcast
が、スコープ ツリー全体に伝播しません。 switch-pane
ディレクティブが独自の API を登録できるサービスを使用する。属性や要素 ID などの識別方法を使用する- の内部構造
angular.element().scope()
にアクセスするために使用するswitch-pane
率直に言って、私はこれらの方法のどれもあまり好きではありません。確かにDOMに縛られるのは避けたいので、最後の2つは最悪です。
これを行う他の方法はありますか?ディレクティブの API を公開する最も Angular っぽい方法はどれですか?