我正在使用此处概述的 $broadcast 模式让控制器收听他们的服务状态。
比如这里我监听服务的忙/闲状态来设置鼠标光标。
//Our service
function startRunning(){
$rootScope.$broadcast("busy");
}
function stopRunning(){
$rootScope.$broadcast("unbusy");
}
//Our controller
$scope.$on("busy", function(){
$scope.state = "busy";
});
$scope.$on("unbusy", function(){
$scope.state = "ready"
});
HTML
<div ng-controller = "myctrl" ng-state = "state"/>
CSS:
.busy{
cursor: wait;
}
.ready {
cursor:auto;
}
这样做的问题是光标不会立即改变。它通常需要我移动鼠标,我想$digest
在光标改变之前触发循环。
我可以用
$scope.$apply($scope.state = "ready");
但这会抛出:
Error: [$rootScope:inprog] $digest already in progress
错误。
处理这个问题的最佳方法是什么?
编辑:这是一个有效的 JSFiddle:http: //jsfiddle.net/HB7LU/23512/
这个问题似乎与使用非角度超时/异步方法有关。(即,如果使用 a 则不会出现问题$timeout
,但如果使用setTimeout
;则会出现问题