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'; }]);
我有以上的控制器,它设置一个$范围,我只能访问来自内部的值。
但我看到某处,使用下面的我将能够访问$范围,但是当我console.log($ scope)$ scope.user.zoomlvl它不存在。
我不知道如何访问MenuSideController $ scope并更新valZoom变量。
var appElement = document.querySelector('[ng-app=theApp]'); var $scope = angular.element(appElement).scope(); console.log($scope); $scope.$apply(function() { $scope.user.zoomlvl = valZoom; });
没有看到标记,我猜想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'; }); });