2014-01-21 6 views
7

私はアプリケーションの複数の他のディレクティブがテキスト検索の変更をリッスンできるようにするための検索ディレクティブを作成しています。

ブロードキャストとエミットの違いを理解しようとしています。私の目的に合ったものは何ですか?

私が理解しているように、$ broadcastと$ emitの違いは、$ broadcastがスコープツリーだけになり、$ emitがスコープツリーに上がることです。

これまでのところ私はイベントのために$ rootScope。$ broadcastを使用していました。ほとんどの場合、スコープはグローバルです。 これは正しいことですか? rootScope。$ブロードキャストイベントが多すぎるのではないかと心配すべきですか?それとも、それは問題ではないですか?

答えて

3

一般的には、$rootScopeを全面に注入しないでください。それは多くの場合、松葉杖なりすることができますし、「グローバル変数」

私は$rootScope.broadcastコールを抽象化するサービスを構築、または単に代わりにデータバインディングを使用したいのいずれかの多くを持ってしまいます:

<my-directive text-search="foo"></my-directive> 

以下のようなコントローラで:

.directive('myDirective', [function() { 
    return { 
    link: function($element, $scope, $attrs) { 
     $scope.$watch($attrs.textSearch, function(newValue, oldValue) { 

     // Do stuff here... 

     }); 
    }  
    }; 
}]); 
+0

面白いアイデア@mmattax、あなたに関して上記のディレクティブで、あなたは私がその後、他のディレクティブにリンクできます私の検索ボックスにテキスト検索属性を持っているだろうことを示唆していますか? 'text-search = 'foo''としていますが、検索を聞いているものに値を渡したいので、あなたが提供した例がどのように達成されているのか分かりません。 – pedalpete

+0

@pedalpete ng-modelを使ってスコープに検索テキストを公開する検索ボックスがあります(これは私の例では "foo"です)。他のディレクティブは変更を監視するだけです。 – mmattax

関連する問題