Angular:多个指令一起讨论。 $ apply / $ emit / $ broadcast confusion

时间:2015-05-07 10:38:05

标签: angularjs angular-digest

所以我在控制器中实现了两个指令(Timeline和Displayer)。

当时间轴上发生点击时,$emit向控制器发送了TimelineClicked个事件。

控制器$on('TimelineClicked', cb)$broadcast是对显示器的UpdateDisplay事件。

我有两种情况:

  1. onUpdateDisplay可以在$digest周期内调用,例如,在加载时更新UI
  2. 但当它来自TimelineClicked 显然时,它不是$digest
  3. 因此用$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循环是否等待事件回调完成?
    • 我应该将apply包裹在其他地方($on('TimelineClicked', cb)附近)吗?

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

0 个答案:

没有答案