2

モジュールの実行関数があり、その中に$routeChangeStartイベントバインディングがあります。最初に routeChangeStart イベントがトリガーされた時刻を知りたいです。最初のリクエストの直後、ページがレンダリングされる前に呼び出されることを期待していますが、期待どおりではありません。ページのレンダリングが開始された後にイベントが呼び出されるようです。

  module.run(function ($location, $rootScope) {
      $rootScope.$on("$routeChangeStart", function (event, next, current) {
         //do something with next.xxx
      });
   })

期待される動作は何ですか?それともこれはバグですか?

4

1 に答える 1

0

ページのレンダリングが開始される前にイベントが発生しますが、レンダリングが開始される前にイベントをキャッチできるわけではありません。イベントが発生すると、コール スタックで次に Angular がページのレンダリングを開始し (テンプレートのフェッチ、ルート解決プロパティの待機など)、その後にイベントをキャッチします。angularドキュメントから...

路線変更前に放送。この時点で、ルート サービスは、ルート変更の発生に必要なすべての依存関係の解決を開始します。通常、これには、ビュー テンプレートと、解決ルート プロパティで定義された依存関係のフェッチが含まれます。すべての依存関係が解決されると、$routeChangeSuccess が起動されます。

条件付きで変更を防止する必要がある場合は、代わりに$locationChangeStartイベントを使用してみてください。例えば...

$scope.$on('$locationChangeStart', function (event) {
    if (someCondition) {
       event.preventDefault(); // prevent the change
    }
});

これは、Angular が新しいページの読み込みを開始する前に実行されます。

于 2014-06-25T02:36:57.633 に答える