2016-04-06 4 views
0

Ich habe eine attribute directive und ich möchte eine API für diese Anweisung verfügbar machen, die auf dem Controller aufgerufen werden soll.AngularJS: Wie man öffentliche API auf der Richtlinie herstellt, um vom Prüfer angerufen zu werden?

Ich folgte der obersten Antwort von this Frage, aber das scheint nicht mehr zu funktionieren, oder zumindest funktioniert es nicht für mich. Seit fast drei Jahren, wie kann ich das jetzt machen?

In meinem "myDirective" Direktive ich habe:

return { 
     restrict: 'A', 
     scope: { 
      api: '=' 
     }, 
     link: function(scope, element){ 
     scope.api = { 
       someFunction: function(){...} 
     } 
     ... 
} 

In meinem Markup ich habe:

<div myDirective api="b"></div> 

Und schließlich in meinem Controller, ich versuche zu nennen:

$scope.b.someFunction() --> undefined is not an object 
+0

Erstellen Sie einen Dienst für die Richtlinie, die Sie an die Richtlinie und den Controller anschließen. – Chrillewoodz

+1

Was versuchst du genau zu erreichen? Direktiven sollen keine API für Controller bereitstellen. Das machen Services. –

+0

@JBNizet, also in meiner Direktive, ich erstelle Event-Handler zu einem Element. Um die Event-Handler zu entfernen, brauche ich Verweise auf die Handler-Funktionen. Schlägst du vor, die Handler stattdessen in einem Dienst zu definieren und den Dienst sowohl zum Hinzufügen als auch zum Entfernen der Handler aufzurufen? – PDN

Antwort

0

Die Vorgehensweise besteht darin, einen Dienst zu erstellen, der als API für die Richtlinie und den Controller verwendet wird.

Injizieren Sie den Dienst in Ihren Direktivencontroller, um ihn in der Richtlinie zu verwenden, und injizieren Sie ihn in den Controller.

Die gesamte API-Logik sollte im Dienst sein, so dass das Aufrufen der Funktionen von der Direktive oder vom Controller dasselbe Ergebnis hat.

Verwandte Themen