Wie $rootScope
speichere ich Variablen in einem Controller, auf den ich später in einem anderen Controller zugreifen möchte? Beispielsweise:
angular.module('myApp').controller('myCtrl', function($scope) {
var a = //something in the scope
//put it in the root scope
});
angular.module('myApp').controller('myCtrl2', function($scope) {
var b = //get var a from root scope somehow
//use var b
});
Wie würde ich das machen?
Antworten:
Im Root-Bereich festgelegte Variablen stehen dem Controller-Bereich über die prototypische Vererbung zur Verfügung.
Hier ist eine modifizierte Version von @ Nitishs Demo, die die Beziehung etwas klarer zeigt: http://jsfiddle.net/TmPk5/6/
Beachten Sie, dass die Variable von rootScope beim Initialisieren des Moduls festgelegt wird und dann jeder der geerbten Bereiche eine eigene Kopie erhält, die unabhängig festgelegt werden kann (die
change
Funktion). Außerdem kann der Wert des rootScope aktualisiert werden (diechangeRs
Funktion inmyCtrl2
).quelle
$scope.test = 'Some value'
, wird sich das auch$rootScope.test
ändern?$rootScope
global ist (über alle Controller hinweg), aber$scope
lokal für den Controller bleibt. Wenn Sie$scope.test
in zwei verschiedenen Controllern verwenden, wissen Sie, dass es sich um zwei verschiedene Variablen handelt, ob$rootScope.test
sie in allen Controllern dieselbe Variable sindDer Austausch von Daten zwischen Controllern ist das, wofür Fabriken / Services sehr gut geeignet sind. Kurz gesagt, es funktioniert ungefähr so.
Sie können ein funktionierendes Beispiel in dieser Geige sehen: http://jsfiddle.net/mbielski/m8saa/
quelle
$rootScope
sollte nicht verwendet werden, um Variablen zu teilen, wenn wir Dinge wie Dienstleistungen und Fabriken haben.DEMO
quelle
Ich finde keinen Grund, dies zu tun $ scope.value = $ rootScope.test;
$ scope ist bereits eine Prototypvererbung von $ rootScope.
Bitte sehen Sie dieses Beispiel
Jetzt können Sie diese Bereichsvariable an eine beliebige Stelle im App-Tag binden.
quelle
Speichern Sie zuerst die Werte in $ rootScope als
$ rootScope ist das übergeordnete Element aller $ scope. Jeder $ scope erhält eine Kopie der $ rootScope-Daten, auf die Sie mit $ scope selbst zugreifen können.
quelle
Wenn es sich nur um "Zugriff in einem anderen Controller" handelt, können Sie dafür Winkelkonstanten verwenden. Der Vorteil ist: Sie können einige globale Einstellungen oder andere Dinge hinzufügen, auf die Sie während der gesamten Anwendung zugreifen möchten
und dann wie folgt darauf zugreifen:
(nicht getestet)
Weitere Informationen: http://ilikekillnerds.com/2014/11/constants-values-global-variables-in-angularjs-the-right-way/
quelle
http://astutejs.blogspot.in/2015/07/angularjs-what-is-rootscope.html
quelle
Es gibt mehrere Möglichkeiten, um dies zu erreichen:
1. Fügen Sie
$rootScope
in.run
Verfahren2. Erstellen Sie einen Dienst und greifen Sie auf beiden Controllern darauf zu.
quelle