2013-10-28 6 views
5

私のルートテンプレートを怠惰にロードしたくありません。代わりに、私はすべてのルートテンプレートを$ templateCacheにロードするすべてのルートをロードしたいと思います。

これは私がやっているものです:

angular.module('myApp', ['ngRoute']).config(['$routeProvider', '$locationProvider', function ($routeProvider, $locationProvider) 
{ 
    $locationProvider.html5Mode(false); 

    $routeProvider.when("/main", {templateUrl: "main", controller: "MainCtrl"}) 
        .when("/login",{templateUrl: "login", controller: "LoginCtrl"}); 
}]) 
.run(['$location','$templateCache', function ($location, $templateCache) 
{ 
    //...Save templates in $templateCache 
    $location.path("/login"); 
}]); 

それは任意の経路と一致していないので、あなたが/を参照する場合、これはOKに動作します。しかし、/#/loginをブラウズしたりリフレッシュしたりすると、ルートブロックが実行される前にルートサービスがテンプレートをロードしようとしているように見え、サーバーにリクエストが送信されます。

ルートサービスがテンプレートを探す前に$ templateCacheを実行するコードが確実に実行されるようにする方法はありますか?

答えて

3

グラントを使用している場合は、その目的でgrunt-angular-templatesを強くお勧めしますが、手動でこれを行うには、類似のロジックを持つ別のモジュールを手動で作成する必要があります。

angular.module('myapp.templates').run(['$templateCache', function($templateCache) { 
$templateCache.put(... 

このモジュールをアプリケーションの依存関係として参照してください。依存関係モジュールの実行ブロックは、ルーティングロジックが起動し、それが必要とする前に最初に実行されます。

+0

これは良い考えです。私はそれがうまくいくと思ったが、それはしなかった。 myAppがテンプレートに依存していても、メインモジュール 'myApp'の* config *ブロックは 'templates'モジュールの* run *ブロックの前に実行されます。私は、configブロックが実行ブロックのように実行する依存関係を待つ必要はないと考えています。残念ながら、ルートはconfigブロックで設定する必要があります。 – CHS

+0

ええ、ルートはconfigブロックで設定する必要がありますが、ルーティング自体はconfigブロックでは実行されないため、接続されたコードがトリックを行います。$ templateCacheはリダイレクトより先に入力されます。私はアプリでこれを行い(グラント角テンプレートを使って)、それは完全に機能します。 –

+0

@Tadeuszいいえ、ネットワークトラフィックを確認してください。ルーティングは、実行ブロックが実行される前であっても、現在のURLと一致するルートのテンプレートをダウンロードしようとします。 (1.2-rc3)あなたのサーバーがこの要求に正しく応答できるなら、これは気付かないかもしれません。将来のルート変更はキャッシュを使用しますが、最初のキャッシュは変更されません。 – user169867

関連する問題