AngularJS access controller $ scope de l’extérieur

var theApp = angular.module('theApp', []); var app = angular.module('theApp', ['ui.bootstrap']); app.controller('MenuSideController', ['$scope','SnazzyService','$modal','$log', function($scope, SnazzyService, $modal, $log) { $scope.user.zoomlvl = '2'; }]); 

J’ai le contrôleur ci-dessus et il définit une $scope que je ne peux jamais accéder aux valeurs de l’intérieur.

Mais j’ai vu quelque part que si j’utilisais ce qui suit, je pourrais accéder à $scope mais quand je console.log($scope) le $scope.user.zoomlvl n’existe pas.

Je ne peux pas comprendre comment accéder à la MenuSideController de MenuSideController $ et la mettre à jour avec la variable valZoom .

 var appElement = document.querySelector('[ng-app=theApp]'); var $scope = angular.element(appElement).scope(); console.log($scope); $scope.$apply(function() { $scope.user.zoomlvl = valZoom; }); 

Sans voir le balisage, je suppose que la scope de MenuSideController est une scope enfant à la scope que vous sélectionnez.

Bien qu’il soit possible de parcourir l’arborescence comme ceci (en supposant que la scope que nous voulons est le premier enfant):

 var appElement = document.querySelector('[ng-app=theApp]'); var appScope = angular.element(appElement).scope(); var controllerScope = appScope.$$childHead; console.log(controllerScope.user); 

Il est plus simple de sélectionner l’élément auquel le contrôleur spécifique est attaché.

En supposant que vous utilisez la directive ng-controller :

  

Faites plutôt:

 var controllerElement = document.querySelector('body'); var controllerScope = angular.element(controllerElement).scope(); console.log(controllerScope.user); 

Démo: http://plnkr.co/edit/WVNDG9sgYgoWaNlrNCVC?p=preview

 angular.element(document).ready(function() { var appElement = document.querySelector('[ng-app=theApp]'); var appScope = angular.element(appElement).scope(); console.log('Traversing from appScope to controllerScope:', appScope.$$childHead.user); var controllerElement = document.querySelector('body'); var controllerScope = angular.element(controllerElement).scope(); console.log('Directly from controllerScope:', controllerScope.user); controllerScope.$apply(function() { controllerScope.user.zoomlvl = '10'; }); });