2014-01-21 104 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

相關問題