0

我正在使用此处概述的 $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;则会出现问题

4

0 回答 0