2016-05-02 4 views
0

角度アプリのrun()セクションでサービスを呼び出す必要があります。

このサービスではrun()部分から呼び出す際に定義されていない$route.current.paramsにアクセスする必要があります。

$route.current.paramsをリスンするアプリケーションのrun()部分にイベントリスナーを追加することはできますか?多分、私のサービス関数を呼び出す方が良いかもしれませんが、アプリケーションの起動時に呼び出す必要があります。

私の解決策は$timeoutですが、より洗練されたソリューションが存在することを願っています。角度のマニュアルでEventListener

angular.element(document).ready(function() { 
    console.log('page loading completed'); 
}); 
+0

どのルータを使用しますか? ngRouterまたはUi-Router? – Aliz

+0

これはngRouterです。 – hering

答えて

0

試してみてください。

$ routeChangeStart

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

イベントのpreventDefaultメソッドを呼び出すことで、経路変更(およびそれを引き起こした$場所の変更)を にすることができます。イベントオブジェクトの詳細については、 $ rootScope.Scopeを参照してください。あなたはそのようにそれを行うことができます(下の最初のコメントに基づいて)

ドキュメントへのリンク:https://docs.angularjs.org/api/ngRoute/service/ $ルート

あなたはそのようにそれを行うことができます。

run(function($rootScope, $location) { 
    $rootScope.$on("$routeChangeStart", function(event, next, current) { 
     // check anything you want 
    }); 
    }); 

更新:

run(function($route) { 
    // do whatever you need with $route.currrent.params 
    }); 
+0

遅延が0の$タイムアウトを使用した場合と比較した利点は何ですか? – hering

+0

'$ timeout'では、ドキュメントがロードされていると100%確信しています。 – Greg

+0

私が知る限り、 '$ timeout'に与えられた関数は現在のダイジェストの後に実行されるので、' $ route'が定義されていることを確認できます – hering

1

は、彼らが言う追加

+0

これはオプションですが、 。すべてのrouteChangeにはありません。 – hering

+0

@hering:私のresponeを更新しました – Aliz

関連する問題