Как я могу использовать $rootScope
для хранения переменных в контроллере, к которому я хочу позже обратиться в другом контроллере? Например:
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
});
Как бы я это сделал?
Ответы:
Переменные, установленные в корневой области, доступны для области контроллера через прототипное наследование.
Вот модифицированная версия демоверсии @ Nitish, которая показывает отношения немного яснее: http://jsfiddle.net/TmPk5/6/
Обратите внимание, что переменная rootScope устанавливается при инициализации модуля, а затем каждая из унаследованных областей получает свою собственную копию, которую можно установить независимо (
change
функция). Кроме того, значение rootScope также может быть обновлено (changeRs
функция вmyCtrl2
)источник
$scope.test = 'Some value'
, будут ли$rootScope.test
изменения также?$rootScope
глобальна (для всех контроллеров), но$scope
остается локальной для контроллера. Если вы используете$scope.test
два разных контроллера, знайте, что это две разные переменные,$rootScope.test
будет лиОбмен данными между контроллерами - это то, для чего фабрики / службы очень хороши. Короче, работает примерно так.
Вы можете увидеть рабочий пример в этой скрипке: http://jsfiddle.net/mbielski/m8saa/
источник
$rootScope
Не следует использовать для обмена переменными, когда у нас есть такие вещи, как услуги и фабрики.DEMO
источник
я не вижу причин делать это $ scope.value = $ rootScope.test;
$ scope - это уже наследование прототипа от $ rootScope.
Пожалуйста, посмотрите этот пример
теперь вы можете привязать эту переменную области видимости в любом месте тега приложения.
источник
сначала сохраните значения в $ rootScope как
$ rootScope является родителем всех $ scope, каждый $ scope получает копию данных $ rootScope, к которым вы можете получить доступ, используя сам $ scope.
источник
Если это просто «доступ в другой контроллер», то для этого вы можете использовать угловые константы, преимущество в этом; Вы можете добавить некоторые глобальные настройки или другие вещи, которые вы хотите получить доступ через приложение
а затем получить к нему доступ, как:
(не тестировал)
больше информации: http://ilikekillnerds.com/2014/11/constants-values-global-variables-in-angularjs-the-right-way/
источник
http://astutejs.blogspot.in/2015/07/angularjs-what-is-rootscope.html
источник
Есть несколько способов достичь этого:
1. Добавить
$rootScope
в.run
метод2. Создайте один сервис и получите доступ к нему на обоих контроллерах.
источник