2

所以我在控制器中实例化了两个指令(时间轴和显示器)。

当时间轴上发生点击时,它$emitTimelineClicked控制器的事件。

控制器作为Displayer 的事件$on('TimelineClicked', cb)$broadcastUpdateDisplay

我这里有两种情况:

  1. onUpdateDisplay可以在一个$digest周期内调用,例如在加载时,它会更新 UI
  2. TimelineClicked 但是当它显然来自它时,它没有被$digest编辑。

因此用这样的包装方法$apply

$scope.onUpdateDisplay = function($event, activeObjects) {
    $scope.$apply(function() {
        //$scope values modification
    });
};

$apply already in progress error将在情况 1 而不是 2 中触发when 。

我不考虑做一些if ($scope.$root.$$phase != '$apply' && $scope.$root.$$phase != '$digest')太脏的事情恕我直言。

  • 两个指令应该如何一起讨论并确保它们的范围始终是最新的?
  • $apply 循环是否等待事件回调完成?
  • 我应该把apply其他地方(周围$on('TimelineClicked', cb))包装起来吗?

我尝试了几种配置都没有成功...

4

0 回答 0