2014-01-21 5 views
7

Ich baue eine Suchanweisung, die mehrere andere Direktiven meiner Anwendung in der Lage sein soll, auf Änderungen der Textsuche zu hören.

Ich versuche zu verstehen, den Unterschied zwischen Rundfunk und emittieren, und was ist am besten für meine Zwecke.

Wie ich es verstehe, ist der Unterschied zwischen $ broadcast und $ emit, dass $ broadcast nur den Scope-Baum hinuntergeht, und dass $ emit den Scope-Baum hinaufgeht.

Bis zu diesem Punkt habe ich $ rootScope. $ Broadcast für meine Ereignisse verwendet, die zum größten Teil global waren. Ist das der richtige Weg, Dinge zu tun? Sollte ich besorgt sein, wenn ich zu viele rootScope $ Broadcast-Ereignisse habe? Oder ist das ein Nicht-Problem?

Antwort

3

Im Allgemeinen sollten Sie $rootScope nicht überall injizieren. Es kann, wird häufig eine Krücke, und Sie werden eine Menge von „globalen Variablen“

am Ende mit würde ich entweder einen Dienst aufzubauen, der die $rootScope.broadcast Anruf abstrahiert oder einfach Datenbindung statt:

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

mit einem Controller wie:

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

     // Do stuff here... 

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

interessante Idee @mmattax, Sie gegen oben genannte Richtlinie, schlagen Sie vor, dass ich ein Text-Suchattribut auf meiner Suche-Box, die ich auf andere Richtlinien könnte dann verknüpfen haben würde? Sie geben es als 'text-search = 'foo'' an, aber ich möchte einen Wert an alles weitergeben, das auf die Suche wartet, also bin ich mir nicht sicher, wie das Beispiel, das Sie zur Verfügung gestellt haben, das erreicht. – pedalpete

+0

@pedalpete Sie würden ein Suchfeld haben, das ng-Modell verwendet, um den Suchtext auf dem Bereich zu veröffentlichen (das ist, was "foo" in meinem Beispiel ist). Andere Richtlinien würden nur nach Änderungen Ausschau halten. – mmattax