3

アプリケーションのどこでも使用できる再利用可能なウィジェットのセットが必要です。たとえば。ネストされたカスタム タグとして定義された設定メニューとメニュー項目が必要です。メニュー項目またはメニューから親コンテキスト (親ディレクティブのコントローラーなど) にイベントを送信できるようにしたいと考えています。

しかし、私は範囲でいくつかの奇妙なことを理解しました(おそらく私は何かを誤解しました):

<panel title="clock">
    <clock timezone="MST"></clock>
    <clock timezone="MST"></clock>
    <clock timezone="MST"></clock>
</panel>

次の例では、アイテムをクリックしたときに親ディレクティブ コントローラーにイベントを発生させません: http://jsfiddle.net/9VTfR/2/

しかし、次は問題なく動作します: http://jsfiddle.net/9VTfR/3/

また、両方のオプションでコンソールに奇妙な JS エラーが表示されました。

親ディレクティブは(親コントローラーだけでなく)親スコープでもある必要があるため、どのレベルでもイベントをキャッチすることは可能ですか?どんな助けでも大歓迎です。

4

1 に答える 1

6

コンソールに表示されるエラーは、フィドルに Angular が 2 回含まれているためです (外部リソースに 1 回、フレームワークと拡張機能に 1 回)。

あなたが発砲していない理由$scope.$on('clickObject')は、両方のディレクティブが兄弟であり、$emit上向きにのみ通知するためです

ドキュメントから

登録されたリスナーに通知するスコープ階層を介して上向きにイベント名をディスパッチします。

$scope.$parent( like this )を使用できますが、ディレクティブがどのように構造化されるかについていくつかの仮定があります。$rootScope(このように)を使用することもできます。十分に一意のイベント名を使用しないと、まれに競合が発生する可能性があります。

于 2013-04-21T22:56:48.837 に答える