2

したがって、コントローラーでインスタンス化された 2 つのディレクティブ (Timeline と Displayer) があります。

タイムラインでクリックが発生すると、$emitコントローラーTimelineClickedにイベントが送信されます。

コントローラー$on('TimelineClicked', cb)は、Displayer へ$broadcastのイベントです。UpdateDisplay

ここには2つの状況があります:

  1. onUpdateDisplay$digestUI を更新するロード時などのサイクル中に呼び出すことができます。
  2. しかし、TimelineClicked どうやらそれは$digestedではありません。

$applyしたがって、メソッドを次のようにラップします。

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

$apply already in progress errorwhen の状況 1 ではなく it 2 をトリガーします。

if ($scope.$root.$$phase != '$apply' && $scope.$root.$$phase != '$digest')私見が汚すぎるようなことをすることは考えていません。

  • 2 つのディレクティブがどのように連携し、スコープが常に最新であることを確認する必要がありますか?
  • $apply サイクルは、イベントのコールバックが終了するのを待ちますか?
  • apply他の場所 (の周り)をラップする必要があり$on('TimelineClicked', cb)ますか?

成功せずにいくつかの構成を試しました...

4

0 に答える 0