Comment utiliser $rootScope
pour stocker des variables dans un contrôleur auquel je souhaite accéder ultérieurement dans un autre contrôleur? Par exemple:
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
});
Comment pourrais-je faire ça?
Réponses:
Les variables définies à la portée racine sont disponibles pour la portée du contrôleur via l'héritage prototypique.
Voici une version modifiée de la démo de @ Nitish qui montre la relation un peu plus clairement: http://jsfiddle.net/TmPk5/6/
Notez que la variable de rootScope est définie lors de l'initialisation du module, puis que chaque étendue héritée obtient sa propre copie qui peut être définie indépendamment (la
change
fonction). De plus, la valeur de rootScope peut également être mise à jour (lachangeRs
fonction dansmyCtrl2
)la source
$scope.test = 'Some value'
, le$rootScope.test
changement aussi?$rootScope
soit globale (sur tous les contrôleurs) mais$scope
reste locale au contrôleur. Si vous utilisez$scope.test
deux contrôleurs différents, sachez qu'il s'agit de deux variables différentes, que$rootScope.test
ce soit la même variable dans tous les contrôleursLe partage de données entre les contrôleurs est ce à quoi les usines / services sont très utiles. En bref, cela fonctionne quelque chose comme ça.
Vous pouvez voir un exemple de travail dans ce violon: http://jsfiddle.net/mbielski/m8saa/
la source
$rootScope
ne devrait pas être utilisé pour partager des variables lorsque nous avons des choses comme des services et des usines.DEMO
la source
je ne trouve aucune raison de faire cela $ scope.value = $ rootScope.test;
$ scope est déjà l'héritage du prototype de $ rootScope.
Veuillez voir cet exemple
vous pouvez maintenant lier cette variable d'étendue n'importe où dans la balise d'application.
la source
stockez d'abord les valeurs dans $ rootScope sous
$ rootScope est le parent de tous les $ scope, chaque $ scope reçoit une copie des données $ rootScope auxquelles vous pouvez accéder en utilisant $ scope lui-même.
la source
S'il s'agit simplement d'un "accès dans un autre contrôleur", vous pouvez utiliser des constantes angulaires pour cela, l'avantage est; vous pouvez ajouter des paramètres globaux ou d'autres éléments auxquels vous souhaitez accéder tout au long de l'application
puis y accéder comme:
(n'a pas testé)
plus d'informations: http://ilikekillnerds.com/2014/11/constants-values-global-variables-in-angularjs-the-right-way/
la source
http://astutejs.blogspot.in/2015/07/angularjs-what-is-rootscope.html
la source
Il existe plusieurs façons d'y parvenir: -
1. Ajouter
$rootScope
à la.run
méthode2. Créez un service et accédez-y dans les deux contrôleurs.
la source