6

Ich habe einen Dienst in angularJS erstellt, die btford.socket-io-Modul verwendet, um mit dem Server zu interagieren. Da ich im Service einige APIs implementiert habe, die ich momentan im angular nutze, aber für die spätere Erweiterung der Anwendung muss ich auch Zugriff auf diese API außerhalb des Winkelbereichs geben. Damit man in Zukunft einfach die Funktion aufrufen kann, ohne Controller und anderes Zeug erstellen zu müssen.Service-Funktionen außerhalb Angularjs Bereich

Im Moment habe ich dies für einen Controller hat

var myController = angular.element($('body')).scope().myController; 

durch die gesamte Steuerung in einem Umfang Variable zu speichern. Ich frage mich, ob es möglich wäre, das gleiche mit einem Service zu tun.

Antwort

11

Wie wäre:

angular.element(document.body).injector().get('MyService');

Regel keine gute Praxis. Aber manchmal ist es nötig.

Hinweis: document.body ist das Element Ihre Winkel Anwendung montiert ist

Eine andere Sache, die Sie sich anschauen sollten sich externe api mit Winkel über eine Fabrik ‚Schließen‘.

  • z. Gib deine globale oder namespaced Klasse oder API aus einer eckigen Fabrik zurück.

Dies ist im Wesentlichen, was eckig für Sie tut. Aber anstatt zuerst die Referenz innerhalb des Winkels zu erzeugen und sie extrahieren zu müssen, würden Sie sie außerhalb erstellen und sie bei DI als Fabrik oder Wert registrieren.

+0

Es funktioniert :) Ich weiß, dass das schlecht ist, weil ich außerhalb des Winkelbereichs arbeite. Da ich mehrere Direktiven mit angularjs als Framework erstelle und gleichzeitig auch den Service für externe Entwickler API nutzen möchte, gibt es keine Alternativen. Vielleicht neu schreiben die API getrennt von angularjs wäre eine Möglichkeit, aber dies würde das Architekturdesign beeinträchtigen. – giulio

Verwandte Themen