【发布时间】:2014-10-01 18:51:53
【问题描述】:
我无法获取 $scope 变量来触发屏幕重新绑定。是的,我在分配 $scope.value = value; 后尝试调用 $scope.$apply()是的,我尝试在分配后手动调用 $digest();我收到错误“$rootScope:inprog] $digest already in progress。
所以我所做的是尝试让我的 $rootScope.$on('message'function(){}) 侦听器创建一个辅助 $broadcast 到所有范围以尝试深入了解它;但是,我的 $scope 对事件的注册没有触发,我认为这可能与同一问题有关....也许不是。无论如何,这是我的密码。
我会制作一个小提琴,但它目前被网络政策阻止。
清单:
- [配置]
- [index.html]
- [foo.html]
- [ctrl]
[config](一些尝试的 hack。它们用 cmets 标记)
var kata = angular.module('kata',[
'ngRoute'
]).run(['$rootScope',
function($rootScope){
$rootScope.$on('message:foo',function(event,data){
$rootScope.$broadcast('message:bar',['foo1','foo2','foo3']);//send secondary msg
$rootScope.data = data; //Hack #1: When I couldn't get $scope to rebind, I tried to use $rootScope;still doesn't rebind.
});
}]);
kata.config(['$routeProvider',
function($routeProvider){
$routeProvider
.when('/Foo',{
templateUrl: 'foo.html',
controller: 'FooCtrl'
});
}]);
[index](这里没什么好笑的)
<html ng-app="kata">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,Chrome=1"></meta>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.25/angular.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.25/angular-route.js"></script>
<script src="./routingConfig.js"></script>
<script src="./controllers.js"></script>
</head>
<body>
<div class="view-container">
<div ng-view class="view-frame"></div>
</div>
</body>
</html>
[foo.html](这里没什么好笑的) 有几个 $scope 变量附加到相同的东西的几个测试。 这些都没有更新
<div>
This page is for capturing Data
Data: {{data}}
<hr />
<ul>
<li ng-repeat="foo in foos">
<span>Foo Found!</span>
</li>
</ul>
</div>
[ctrl](在作用域上创建了几个变量试图以不同的方式解决这个问题)
var kataCtrl= kata.controller("FooCtrl",
[ '$scope', '$http','$rootScope','$location'
,function($scope, $http, $rootScope , $location) {
$scope.data = "Foo";
$scope.data1 = "[placeholder]";
$scope.foos = [];
//fires, assigns, view does not update
$scope.$watch(function(){
return $rootScope.data;
}, function(){
$scope.foos = ['data','foo','bar','baz'];<=Assignment succeeds. View does not update
$scope.$apply();//<=Does nothing apparent; View does not update
$scope.$digest();//<= Console Error. Already in digest loop
},true);
//does not fire
$scope.$on('message:foo',function(event,data){ //<= This never catches
$scope.data = data;
});
//fires, assigns, View does not update
$rootScope.$on('message:bar',function(event,data){
$scope.foos = ['data','foo','bar','baz'];
$scope.foo1 = data.element1;
$scope.data = "[Foos returned from $rootScope]";
$scope.$apply();//<= Does not help. Changing to $scope.$digest() indicates already in digest loop
});
}]);
回顾一下,我的配置中的 $rootScope.$on() 正在触发。它正在正确地为 $rootScope 上的变量赋值。 $rootScope.$broadcast 正在生成辅助消息。控制器的 $scope.$on 注册消息没有捕获。控制器的 $rootScope.$on 注册触发并在 $scope 上分配值,但视图不会重新绑定。调用 $scope.$apply() 没有帮助。调用 $scope.$digest() 仅报告摘要循环当前正在运行。
作用域变量被分配,但视图永远不会重新绑定。
在广阔的体育世界里发生了什么?
【问题讨论】:
标签: javascript angularjs scope