1

少し複雑なので、我慢してください。3 層のディレクティブがあります。

  1. 最上位レイヤー - ポップアップ ディレクティブ
  2. 中間層 -switch-paneディレクティブ *
  3. 最下層 - いくつかのビューの 1 つ

最上層は、アプリのウィザードを表すポップアップです。中間層は、ビューのスタックとして機能する私が作成したディレクティブです。ビューを「プッシュ」および「ポップ」できます。「トップ」ビューが表示され、残りは押しのけられてぼやけています。最下層は、通常は互いに関連のない一連のビューでありswitch-pane、ユーザーの操作に応じて動的に読み込まれて表示されます。

これまでのところ、これは機能しますが、現在、最上位レイヤーには、表示$scopeする必要があるすべてのビューを表す配列プロパティがあり、属性としてディレクティブswitch-paneに渡され、ディレクティブはそれを使用して更新します。これは問題ありませんが、十分ではないと思います。ディレクティブ自体でビューのスタックを管理し、API のみを公開するようにしたいと考えています。switch-paneswitch-pane$watchswitch-panepushpop

ここに私が考えたいくつかの方法があります:

  • $broadcast/を使用$emit- 最上位レイヤーは「プッシュ」イベントを $broadcast し、switch-paneそれをキャッチして必要なことを行います
  • サービスを使用する (「プッシュ」イベントをサブスクライブして起動する - これは使用と同じです$broadcastが、スコープ ツリー全体に伝播しません。
  • switch-paneディレクティブが独自の API を登録できるサービスを使用する。属性や要素 ID などの識別方法を使用する
  • の内部構造angular.element().scope()にアクセスするために使用するswitch-pane

率直に言って、私はこれらの方法のどれもあまり好きではありません。確かにDOMに縛られるのは避けたいので、最後の2つは最悪です。

これを行う他の方法はありますか?ディレクティブの API を公開する最も Angular っぽい方法はどれですか?

4

1 に答える 1