我的应用程序有一个带有一些面板的仪表板,每个面板都有一个图表。(我使用Angular-Chart.js)每个面板都是一个不同的自定义指令。
我的TickService带有全局 tick ,每1秒广播一次
function sendUpdateTich()
{
$rootScope.$broadcast("TICK_UPDATE_TIME");
$timeout(sendUpdateTich, 1000);
}
每个指令都会侦听 tick ,以更新自己的图形。
$scope.$on("TICK_UPDATE_TIME", function (event, data)
{
/* update chart's data */
// $scope.$apply();
});
即使按照我自己的逻辑,我也会使用$scope.$apply()
刷新指令'图表,我评论它,因为它没用,图表已经被他们自己刷新。
无论如何,有时我会遇到这个错误:
Error: [$rootScope:inprog] $apply already in progress
http://errors.angularjs.org/1.5.3/$rootScope/inprog?p0=%24apply
http://localhost:8100/lib/ionic/js/ionic.bundle.js:13443:32
beginPhase@http://localhost:8100/lib/ionic/js/ionic.bundle.js:30758:31
$apply@http://localhost:8100/lib/ionic/js/ionic.bundle.js:30498:21
http://localhost:8100/js/orecchioDirective.js:25:40
$broadcast@http://localhost:8100/lib/ionic/js/ionic.bundle.js:30723:33
stopCheckinProximity@http://localhost:8100/js/callTimeService.js:226:26
stopChecking@http://localhost:8100/js/callTimeService.js:163:25
setEnded@http://localhost:8100/js/statusCallService.js:62:34
endCall@http://localhost:8100/js/controllers.js:319:31
fn
http://localhost:8100/lib/ionic/js/ionic.bundle.js:65429:21
$apply@http://localhost:8100/lib/ionic/js/ionic.bundle.js:30500:30
http://localhost:8100/lib/ionic/js/ionic.bundle.js:65428:19
defaultHandlerWrapper@http://localhost:8100/lib/ionic/js/ionic.bundle.js:16792:15
eventHandler@http://localhost:8100/lib/ionic/js/ionic.bundle.js:16780:23
dispatchEvent@[native code]
triggerMouseEvent@http://localhost:8100/lib/ionic/js/ionic.bundle.js:2953:20
tapClick@http://localhost:8100/lib/ionic/js/ionic.bundle.js:2942:20
tapMouseUp@http://localhost:8100/lib/ionic/js/ionic.bundle.js:3018:13
根据其他一些广播事件,我认为(我不知道,但我只是想......)。我没有任何$ scope。$ apply,$ rootScope。$不应用$ scope。$ refresh,代码中的任何位置。问题是什么?
[更新1]
根据{{3}},$timeout()
会$apply()
致电我们,因此我们不必这样做。由于我在服务中有其他$timeout()
,它们是否可能混乱?