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を実行するコードが確実に実行されるようにする方法はありますか?
これは良い考えです。私はそれがうまくいくと思ったが、それはしなかった。 myAppがテンプレートに依存していても、メインモジュール 'myApp'の* config *ブロックは 'templates'モジュールの* run *ブロックの前に実行されます。私は、configブロックが実行ブロックのように実行する依存関係を待つ必要はないと考えています。残念ながら、ルートはconfigブロックで設定する必要があります。 – CHS
ええ、ルートはconfigブロックで設定する必要がありますが、ルーティング自体はconfigブロックでは実行されないため、接続されたコードがトリックを行います。$ templateCacheはリダイレクトより先に入力されます。私はアプリでこれを行い(グラント角テンプレートを使って)、それは完全に機能します。 –
@Tadeuszいいえ、ネットワークトラフィックを確認してください。ルーティングは、実行ブロックが実行される前であっても、現在のURLと一致するルートのテンプレートをダウンロードしようとします。 (1.2-rc3)あなたのサーバーがこの要求に正しく応答できるなら、これは気付かないかもしれません。将来のルート変更はキャッシュを使用しますが、最初のキャッシュは変更されません。 – user169867