AngularJs: pass $scope-variable mit service
Ich habe zwei Controller und bei einem von Ihnen habe ich erklärt, ein $scope-variable, die ich möchte sichtbar in den zweiten controller.
Ersten controller
app.controller('Ctrl1', function ($scope) {
$scope.variable1 = "One";
});
Zweiten Controller
app.controller('Ctrl2', function ($scope, share) {
console.log("shared variable " + share.getVariable());
});
Recherchierte ich den besten Winkel-Ansatz, und ich fand, dass die Verwendung von service. Also habe ich ein service für Ctrl1
Service
.service('share', function ($scope) {
return {
getVariable: function () {
return $scope.variable1;
}
};
});
Dieser code gibt diesen Fehler:
Unknown provider: $scopeProvider <- $scope <- share
Also meine Frage ist: ist es möglich Teile $scope variable zwischen den Controllern? Ist nicht der beste Winkel-Lösung oder bin ich etwas fehlt?
Sorry für meine triviale Frage, aber ich bin eine Eckige Anfänger.
Vielen Dank im Voraus
Hinsichtlich
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie injizieren
$scope
Abhängigkeit im service-factory-Funktion.Grundsätzlich teilbar service aufrecht erhalten sollten, gemeinsam nutzbare Daten in einem Objekt.
Service
Controller
Ja, es ist möglich, zu teilen, den Geltungsbereich von Variablen zwischen den Steuerungen über die Dienste und Fabrik.Aber die $scope-Variablen sind lokal auf dem controller selbst und es gibt keine Möglichkeit für den Dienst zu wissen, dass bestimmte variable.Ich ziehe mit der Fabrik, einfach und glatt wie butter. Wenn Sie mit dem service der Fabrik in eine separate Datei, die Sie brauchen, um die Datei in index.html
Deine versuche mit service ganz gut, aber Sie sollten nicht versuchen, $Umfang, in Abhängigkeit der Injektion in den service-code. Service ist gedacht, um eine Daten-provider, um Sie dann wenn Sie möchten, zu teilen, Daten zwischen 2 Controllern, Sie sollten Platz machen für diese Daten in Ihren Dienst
Dies ist die umfassendere Beschreibung dieser Lösung:
https://stackoverflow.com/a/21920241/4772988
Beste Weg ist wirklich mit Dienstleistungen. Dienstleistungen haben nur Zugang zu
$rootScope
Sie nicht über Ihren eigenen$scope
.Jedoch, sollten Sie nicht verwenden Bereiche für diese Aufgabe. Nur einen Dienst mit einigen der freigegebenen variable außerhalb eines scopes.
Zuerst, Ihre service sollte wie folgt sein:
Um den Wert der freigegebenen variable übergeben Sie den Wert für die Funktion die wir erstellt auf der service
Um den Wert der freigegebenen variable die Funktion auch verwenden, in den Dienst, ohne dabei Wert
Update: Mit $rootScope ist als eine schlechte Praxis.
Was Sie brauchen, ist die
$rootScope
. Die$scope
ist nur für einen controller. Hier ist ein Beispiel:service
.