¿Cómo uso $rootScope
para almacenar variables en un controlador al que quiero acceder más tarde en otro controlador? Por ejemplo:
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
});
¿Cómo haría esto?
Respuestas:
Las variables establecidas en el alcance raíz están disponibles para el alcance del controlador a través de la herencia prototípica.
Aquí hay una versión modificada de la demostración de @ Nitish que muestra la relación un poco más clara: http://jsfiddle.net/TmPk5/6/
Observe que la variable rootScope se establece cuando el módulo se inicializa, y luego cada uno de los alcances heredados obtiene su propia copia que se puede configurar de forma independiente (la
change
función). Además, el valor de rootScope también se puede actualizar (lachangeRs
función enmyCtrl2
)fuente
$scope.test = 'Some value'
, ¿$rootScope.test
cambiará también?$rootScope
es global (sobre todos los controladores) pero$scope
sigue siendo local para el controlador. Si usa$scope.test
dos controladores diferentes, sepa que son dos variables diferentes, ya$rootScope.test
sea la misma variable en todos los controladoresCompartir datos entre controladores es para lo que las fábricas / servicios son muy buenos. En resumen, funciona algo como esto.
Puede ver un ejemplo de trabajo en este violín: http://jsfiddle.net/mbielski/m8saa/
fuente
$rootScope
debería usarse para compartir variables cuando tenemos cosas como servicios y fábricas.MANIFESTACIÓN
fuente
no encuentro ninguna razón para hacer esto $ scope.value = $ rootScope.test;
$ scope ya es un prototipo de herencia de $ rootScope.
Por favor vea este ejemplo
ahora puede vincular esta variable de alcance en cualquier lugar de la etiqueta de la aplicación.
fuente
primero almacene los valores en $ rootScope como
$ rootScope es el padre de todos los $ scope, cada $ scope recibe una copia de los datos de $ rootScope a los que puede acceder utilizando $ scope.
fuente
Si es solo "acceso en otro controlador", entonces puede usar constantes angulares para eso, el beneficio es; puede agregar algunas configuraciones globales u otras cosas a las que desea acceder a través de la aplicación
y luego accede a ella como:
(no probado)
Más información: http://ilikekillnerds.com/2014/11/constants-values-global-variables-in-angularjs-the-right-way/
fuente
http://astutejs.blogspot.in/2015/07/angularjs-what-is-rootscope.html
fuente
Hay varias formas de lograr esto: -
1. Añadir
$rootScope
en el.run
método2. Cree un servicio y acceda a él en ambos controladores.
fuente