Подтвердить что ты не робот

Контроллер доступа AngularJS $за пределами

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

У меня есть вышеуказанный контроллер, и он устанавливает $scope, который я могу получить только из значений изнутри.

Но я где-то видел, что используя ниже, я мог бы получить доступ к $scope, но когда я console.log($scope) $scope.user.zoomlvl, он не существует.

Я не могу понять, как получить доступ к области MenuSideController $и обновить ее с помощью переменной valZoom.

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

Ответ 1

Не видя разметки, я предполагаю, что область MenuSideController является дочерней областью для области, которую вы выбираете.

Пока можно перемещаться по дереву, как это (предполагая, что область, которую мы хотим, является первым ребенком):

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

Проще просто выбрать элемент, в котором подключен конкретный контроллер.

Предполагая, что вы используете директиву ng-controller:

<body ng-controller="MenuSideController"></body>

Сделайте вместо этого:

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

Демо: 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';
  });
});