Wenn ich eine Dienstprogrammfunktion habe foo
, die ich von überall in meiner ng-app
Deklaration aufrufen möchte . Gibt es eine Möglichkeit, wie ich es in meinem Modul-Setup global zugänglich machen kann, oder muss ich es dem Bereich in jedem Controller hinzufügen?
191
module.value('myFunc', function(a){return a;});
und es dann namentlich in Ihre Controller einfügen. (Wenn man einen Dienst vermeiden möchte)Antworten:
Grundsätzlich haben Sie zwei Möglichkeiten: Definieren Sie es entweder als Service oder platzieren Sie es in Ihrem Stammbereich. Ich würde vorschlagen, dass Sie einen Dienst daraus machen, um eine Verschmutzung des Stammbereichs zu vermeiden. Sie erstellen einen Dienst und stellen ihn wie folgt in Ihrem Controller zur Verfügung:
Wenn dies für Sie keine Option ist, können Sie es wie folgt zum Stammbereich hinzufügen:
Auf diese Weise können alle Ihre Vorlagen aufrufen,
globalFoo()
ohne sie vom Controller an die Vorlage übergeben zu müssen.quelle
foo()
Funktionen gibt?$scope.callFoo()
Es ist zu viel Arbeit, für jeden von ihnen einen Wrapper zu erstellen. Wie kann ich alle Funktionen einer Bibliothek in den Bereich "einfügen" , damit sie in der Vorlage verwendet werden kann? Ich habe eine große Einheitenumrechnungsbibliothek, die in meiner Vorlage verfügbar sein soll.$scope.callFoo = myService.foo;
dass an jeder Stelle, an der Sie es verwenden möchten, ein neuer Wrapper erstellt wird.Sie können sie auch kombinieren, denke ich:
quelle
$rootScope
?Obwohl der erste Ansatz als "eckiger" Ansatz empfohlen wird, ist dies meines Erachtens ein zusätzlicher Aufwand.
Überlegen Sie, ob ich diese myservice.foo-Funktion in 10 verschiedenen Controllern verwenden möchte. Ich muss diese 'myService'-Abhängigkeit und dann die $ scope.callFoo-Scope-Eigenschaft in allen zehn angeben. Dies ist einfach eine Wiederholung und verstößt irgendwie gegen das DRY-Prinzip.
Wenn ich den $ rootScope-Ansatz verwende, gebe ich diese globale Funktion gobalFoo nur einmal an und sie wird in allen meinen zukünftigen Controllern verfügbar sein, egal wie viele.
quelle
AngularJs hat " Services " und " Factories " nur für Probleme wie Ihre. Diese werden verwendet, um etwas Globales zwischen Controllern, Direktiven, anderen Services oder anderen AngularJs-Komponenten zu haben. Sie können Funktionen definieren, Daten speichern, Funktionen berechnen oder was auch immer Sie wollen in Services und verwenden Sie sie in AngularJs Components als Global .like
wenn du mehr brauchst
Erfahren Sie mehr darüber, warum wir AngularJs Services und Fabriken benötigen
quelle
Ich bin etwas neuer in Angular, aber ich fand es nützlich (und ziemlich einfach), ein globales Skript zu erstellen, das ich vor dem lokalen Skript auf meine Seite lade, mit globalen Variablen, auf die ich sowieso auf allen Seiten zugreifen muss. In diesem Skript habe ich ein Objekt namens "globalFunctions" erstellt und die Funktionen hinzugefügt, auf die ich global als Eigenschaften zugreifen muss. zB
globalFunctions.foo = myFunc();
. Dann habe ich in jedem lokalen Skript geschrieben$scope.globalFunctions = globalFunctions;
und habe sofort Zugriff auf alle Funktionen, die ich dem globalFunctions-Objekt im globalen Skript hinzugefügt habe.Dies ist eine kleine Problemumgehung und ich bin mir nicht sicher, ob es Ihnen hilft, aber es hat mir definitiv geholfen, da ich viele Funktionen hatte und es ein Schmerz war, alle auf jeder Seite hinzuzufügen.
quelle