我正在使用$broadcast pattern outlined here来控制他们的服务状态。
例如,在这里,我听取服务的busy / unbusy状态来设置鼠标光标。//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/
该问题似乎与使用非角度超时/异步方法有关。 (即使用$timeout
时不会出现问题,但如果使用setTimeout
则会出现问题;