Jak używać $rootScope
do przechowywania zmiennych w kontrolerze, do którego chcę później uzyskać dostęp w innym kontrolerze? Na przykład:
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
});
Jak mam to zrobić?
Odpowiedzi:
Zmienne ustawione w zakresie głównym są dostępne dla zakresu kontrolera poprzez dziedziczenie prototypowe.
Oto zmodyfikowana wersja dema @ Nitisha, która pokazuje relację nieco jaśniej: http://jsfiddle.net/TmPk5/6/
Zauważ, że zmienna rootScope jest ustawiana podczas inicjalizacji modułu, a następnie każdy z dziedziczonych zakresów otrzymuje swoją własną kopię, którą można ustawić niezależnie (
change
funkcja). Można również zaktualizować wartość rootScope (changeRs
funkcja wmyCtrl2
)źródło
$scope.test = 'Some value'
, czy$rootScope.test
zmiana również będzie?$rootScope
jest globalny (dla wszystkich kontrolerów), ale$scope
pozostaje lokalny dla kontrolera. Jeśli używasz$scope.test
dwóch różnych kontrolerów, wiedz, że są to dwie różne zmienne, niezależnie$rootScope.test
od tego , czy byłyby takie same we wszystkich kontrolerachUdostępnianie danych między administratorami jest tym, do czego Fabryki / Usługi są bardzo dobre. Krótko mówiąc, działa coś takiego.
Można zobaczyć działający przykład w tym skrzypcach: http://jsfiddle.net/mbielski/m8saa/
źródło
$rootScope
należy używać do udostępniania zmiennych, gdy mamy takie rzeczy jak usługi i fabryki.PRÓBNY
źródło
nie znajduję żadnego powodu, aby zrobić to $ scope.value = $ rootScope.test;
Zakres $ jest już dziedzictwem prototypowym z $ rootScope.
Zobacz ten przykład
teraz możesz powiązać tę zmienną zakresu w dowolnym miejscu w tagu aplikacji.
źródło
najpierw przechowuj wartości w $ rootScope jako
$ rootScope jest rodzicem wszystkich $ scope, każdy $ scope otrzymuje kopię danych $ rootScope, do których można uzyskać dostęp za pomocą samego $ scope.
źródło
Jeśli jest to po prostu „dostęp do innego kontrolera”, możesz do tego użyć stałych kątowych, korzyścią jest to; możesz dodać niektóre ustawienia globalne lub inne rzeczy, do których chcesz uzyskać dostęp w całej aplikacji
a następnie uzyskaj do niego dostęp w następujący sposób:
(nie testowałem)
więcej informacji: http://ilikekillnerds.com/2014/11/constants-values-global-variables-in-angularjs-the-right-way/
źródło
http://astutejs.blogspot.in/2015/07/angularjs-what-is-rootscope.html
źródło
Istnieje wiele sposobów na osiągnięcie tego:
1. Dodaj
$rootScope
w.run
metodzie2. Utwórz jedną usługę i uzyskaj do niej dostęp w obu kontrolerach.
źródło