$ scope。$适用于$ scope。$ on

时间:2016-02-08 22:37:35

标签: angularjs angular-digest

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

0 个答案:

没有答案