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/

この問題は、Angular 以外のタイムアウト/非同期メソッドの使用に関係しているようです。(つまり、 を使用すると問題は発生しませんが、 ;$timeoutを使用すると発生します。setTimeout

4

0 に答える 0