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'; }); });