所以我在控制器中实现了两个指令(Timeline和Displayer)。
当时间轴上发生点击时,$emit
向控制器发送了TimelineClicked
个事件。
控制器$on('TimelineClicked', cb)
,$broadcast
是对显示器的UpdateDisplay
事件。
我有两种情况:
onUpdateDisplay
可以在$digest
周期内调用,例如,在加载时更新UI TimelineClicked
显然时,它不是$digest
。因此用$apply
包装方法如下:
$scope.onUpdateDisplay = function($event, activeObjects) {
$scope.$apply(function() {
//$scope values modification
});
};
在情况1中会触发$apply already in progress error
而不是2。
我不认为做if ($scope.$root.$$phase != '$apply' && $scope.$root.$$phase != '$digest')
之类的东西太肮脏了恕我直言。
apply
包裹在其他地方($on('TimelineClicked', cb)
附近)吗?我尝试了几种配置但没有成功......