2012-12-27 9 views
30

Wie kann ich Ereignisse von einer Fabrik oder einem Dienst ausstrahlen? Ich kann $ scope nicht in die Fabrik injizieren und kann daher keine Ereignisse ausgeben.So senden Sie Ereignisse von einer Fabrik aus

bekomme ich folgende Fehler - Unknown provider: $scopeProvider <- $scope

Danke, Murtaza

+0

Warum nicht einen Dienst Variable in der Steuerung (en) sieht stattdessen Ereignisse zu emittieren? –

+1

@AndersBornholm Die Uhr funky in eckig wird mit jedem Digest-Zyklus ausgelöst. Digest-Zyklen können je nach App oft vorkommen. Pubsub bietet einen besseren Kommunikationskanal. Es muss nicht bei jedem Digest-Zyklus überprüft werden. – kitimenpolku

Antwort

55

Sie können den Bereich eines Controllers nicht in einen Dienst injizieren. Was Sie tun können ist:

  • den Umfang Instanz als Parameter an einen Ihrer Servicefunktionen übergeben:

z.B.

app.factory('MyService', function() { 

    return { 
     myFunction: function(scope) { 
     scope.$emit(...); 
     ... 
     } 
    }; 
}); 
  • die $ rootScope in Ihren Dienst injizieren:

z.B.

app.factory('MyService', ['$rootScope', function($rootScope) { 

    return { 
     myFunction: function() { 
     $rootScope.$emit(...); 
     ... 
     } 
    }; 
}]); 
+0

+ 1 für die Antwort – murtaza52

+14

Würde ich eine Sendung von rootscope tun? – murtaza52

+0

Ich denke, dies ist die einzige Möglichkeit, Ereignis nach oben zu emittieren, so dass gleiche Level-Controller emittiertes Ereignis nicht fangen - wenn das ist, was Sie wollen (es war in meinem Fall) –

54

Inject $ rootScope statt $ Umfang und es dann auf dem $ rootScope emittieren.

Fabriken haben keinen Zugriff auf den aktuellen Controller/Anweisungsbereich, da es keinen gibt. Sie haben jedoch Zugriff auf den Stamm der Anwendung und deshalb ist $ rootScope verfügbar.

+0

+ 1 für die Antwort – murtaza52

+2

Dies ist die richtige Antwort, Factory muss nicht zu einem Controller abhängen, da ihr Live-Zyklus völlig anders ist. –

-2

In Ihrem Werk inject $ rootScope as-

myApp.factory('myFactory',function($rootScope){ 
return({ 
// use $rootScope as below to pass myEventParams to all below in hierarchy 
$rootScope.$broadcast("myEvent",myEventParams); 

}) 
}]); 
+0

Ich verstehe wirklich nicht, wie man wählt eine Antwort als nicht sinnvoll, ohne eine angemessene Begründung zu geben. Sehr unprofessionell. –

+2

Nun, Ihre Antwort ist im Grunde genommen ein Duplikat der 5 Jahre alten Antworten darüber und fügt nichts hinzu, während sie auch weniger klar ist als die beiden bestehenden akzeptierten Antworten. Welche Informationen hast du deiner Meinung nach hinzugefügt? – toxaq

Verwandte Themen