私はすべてのテンプレートを$ templateCacheに持っていますが、Angularはとにかくリクエストを行っています

ロベルトソアレス

アプリをデプロイするときに、gulp-angular-templatecache使用してすべての.htmlファイルを$ templateCacheに配置しています。

問題は、ルートの名前が$ templateCacheがファイルの保存に使用している名前とまったく同じであっても、Angular(およびui-router)がこれを無視してサーバーにリクエストを送信していることです。

1つの状態の例:

.state('app', {
    url: '/app',
    templateUrl: '/base/view/app.html',
    controller: 'AppController as appCtrl'
});

そして$ templateCache:

$templateCache.put('/base/view/app.html', '<div>...</div>');

これは機能しません。まだapp.htmlをリクエストしています。
ただし、templateUrlを削除し、代わりに$ templateProviderを使用すると、機能します。このような:

.state('app', {
    url: '/app',
    templateProvider: ['$templateCache', function($templateCache) {
        if ($templateCache.get('/base/view/app.html')) {
            return $templateCache.get('/base/view/app.html');
        }
    }],
    controller: 'AppController as appCtrl'
});

しかし、州や指令はたくさんあり、それらすべてを手動で置き換える必要があります。そこで、httpリクエストのインターセプターを作成して、.htmlをリクエストしているかどうかを確認し、キャッシュされているかどうかを確認して返します。それ以外の場合は、リクエストを行います。

ただし、リクエストを停止して、必要なものを返すことができません。私はそれを止めることしかできませんが、それに「偽の」応答を置くことはできません。

私が試したこと:

'request': function(config) {
    var url = angular.copy(config.url);
    if (url.indexOf('.html') !== -1) {
        var cachedData = $templateCache.get(url);
        if (!_.isUndefined(cachedData)) {
            var cachedPromise = $q.defer();
            config.timeout = cachedPromise.promise;
            cachedPromise.resolve();
            // config.timeout is used to stop the request but it doesn't matter the response of the promise, it's probably ignored and just used to stop the request.
        }
    }
    return config;
}

このインターセプターを機能させる方法はありますか?別のアイデアは、ui-routerソースコードを変更して、リクエストを送信する前に$ templateCacheをチェックするようにすることです(キャッシュをチェックするように見えますが、最初のリクエストの後でのみです。最初のリクエストの前でもチェックしたいです) 。それに加えて、私はアイデアがありません... ui-routerのソースコードを変更せずにこれを機能させる方法はありますか?

ロベルトソアレス

私は問題を見つけました。

$rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) {
    if (typeof(toState) !== 'undefined') {
        $templateCache.remove(toState.templateUrl);
    }
});

それがインターセプターで動作していた理由です。上記のコードは$ templateCacheを無効にしていましたが、その後インターセプターが実行されます。したがって、ハンドラー、インターセプターなどを確認することを忘れないでください。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Sequelizeはクエリ情報をトレースできますか、それともマングースのようにsetGlobalTraceFunctionを持っていますか?

分類Dev

コンパイラはreturnステートメントがないことを示していますが、私はすでに3つ持っています

分類Dev

いくつかの古いJavaアプレットを実行するのが難しい、私はJava8とappletviewerを持っています

分類Dev

私はこのbashスクリプトを持っていますが、終了出口を取得するためにどのように改善できますか?

分類Dev

Linuxで.shスクリプトを実行すると構文エラーが発生します。私は何が間違っているのですか?

分類Dev

HtmlUnitログインの試みが、私が通過できない奇妙なページにつながります。「スクリプトが無効になっています。続行するには[送信]をクリックしてください。」

分類Dev

私は同じカテゴリに分類されるサブアイテムの長いリストを持っています、ワードプレス

分類Dev

私はJavaからPythonスクリプトを実行することはできませんし、私は、スクリプトが実行権限を持っていないので、それはだと思います

分類Dev

私がアプリをテストしているとき、それはエラーjava.lang.RuntimeExceptionによってクラッシュします:

分類Dev

gitリポジトリ内のすべてのJavaプロジェクトが最新または望ましいバージョンのmaven依存関係を持っていることを確認するにはどうすればよいですか?

分類Dev

HTTPS - されたWebリクエストとレスポンスは暗号化を持っていますか?

分類Dev

私は実際に私が思っているよりも多くの RAM を持っていますか?

分類Dev

UNIXコンソールで、行を貼り付けて、z.txtにリダイレクトしたいのですが、可能ですか?そして、私がもう一度やったとき、それは追加すべきではありません

分類Dev

アプリユーザーがログイン/ Googleアカウントを持っていなくても、JavaScriptアプリのr / w権限をGoogleスプレッドシートファイルに付与することはできますか?

分類Dev

リストを返す、私はすでに行マッパー実装を持っています

分類Dev

RESTは私のアプリケーションにとって良い解決策ですか?-(多くのアクションを持つシステム)

分類Dev

すべての子が折りたたまれているか非表示になっている場合、階層データテンプレートでエキスパンダーを非表示にするにはどうすればよいですか?

分類Dev

言われて私のコードは、あまりにも多くの「if」ステートメントを持っています

分類Dev

私はいくつかのリストを持っています、私はそれらをマージしました、しかしどうすれば値を降順でそしてそれをSTDとして置くことができますか?

分類Dev

linqクエリの下にキャストするのを手伝ってくれる人はいますか?

分類Dev

Google Static Mapsは私のリクエストを拒否しましたが、有効になっています

分類Dev

キーストアエントリが見つかりません。しかし、私はそれがそこにあることを知っています

分類Dev

Iterableを取得する必要があります、私はディクトのリストを持っています

分類Dev

mysqlは、Selectステートメントに参加しようとしているこれらのクエリの何が問題になっていますか

分類Dev

リスト内の各子は、PDF.JSですべてのPDFページをレンダリングするときに、一意の「キー」プロップを持っている必要があります

分類Dev

どのように私は、フレームにスクロールすると移動していることのJButtonを持っていますか?

分類Dev

私は基本的なtoDoアプリに取り組んでいます。アイテムを長押しすると、リストから削除されますが、何も実行されません。私は何が間違っているのですか?

分類Dev

新しいHDD(x3)のディスク書き込みエラー!! 私が多くのことを試したのを手伝ってください。私はそれが一貫して高いビットレートの使用にダウンしていると思います

分類Dev

bashスクリプトの出力値を正確に返す方法はコマンドを持っています

Related 関連記事

  1. 1

    Sequelizeはクエリ情報をトレースできますか、それともマングースのようにsetGlobalTraceFunctionを持っていますか?

  2. 2

    コンパイラはreturnステートメントがないことを示していますが、私はすでに3つ持っています

  3. 3

    いくつかの古いJavaアプレットを実行するのが難しい、私はJava8とappletviewerを持っています

  4. 4

    私はこのbashスクリプトを持っていますが、終了出口を取得するためにどのように改善できますか?

  5. 5

    Linuxで.shスクリプトを実行すると構文エラーが発生します。私は何が間違っているのですか?

  6. 6

    HtmlUnitログインの試みが、私が通過できない奇妙なページにつながります。「スクリプトが無効になっています。続行するには[送信]をクリックしてください。」

  7. 7

    私は同じカテゴリに分類されるサブアイテムの長いリストを持っています、ワードプレス

  8. 8

    私はJavaからPythonスクリプトを実行することはできませんし、私は、スクリプトが実行権限を持っていないので、それはだと思います

  9. 9

    私がアプリをテストしているとき、それはエラーjava.lang.RuntimeExceptionによってクラッシュします:

  10. 10

    gitリポジトリ内のすべてのJavaプロジェクトが最新または望ましいバージョンのmaven依存関係を持っていることを確認するにはどうすればよいですか?

  11. 11

    HTTPS - されたWebリクエストとレスポンスは暗号化を持っていますか?

  12. 12

    私は実際に私が思っているよりも多くの RAM を持っていますか?

  13. 13

    UNIXコンソールで、行を貼り付けて、z.txtにリダイレクトしたいのですが、可能ですか?そして、私がもう一度やったとき、それは追加すべきではありません

  14. 14

    アプリユーザーがログイン/ Googleアカウントを持っていなくても、JavaScriptアプリのr / w権限をGoogleスプレッドシートファイルに付与することはできますか?

  15. 15

    リストを返す、私はすでに行マッパー実装を持っています

  16. 16

    RESTは私のアプリケーションにとって良い解決策ですか?-(多くのアクションを持つシステム)

  17. 17

    すべての子が折りたたまれているか非表示になっている場合、階層データテンプレートでエキスパンダーを非表示にするにはどうすればよいですか?

  18. 18

    言われて私のコードは、あまりにも多くの「if」ステートメントを持っています

  19. 19

    私はいくつかのリストを持っています、私はそれらをマージしました、しかしどうすれば値を降順でそしてそれをSTDとして置くことができますか?

  20. 20

    linqクエリの下にキャストするのを手伝ってくれる人はいますか?

  21. 21

    Google Static Mapsは私のリクエストを拒否しましたが、有効になっています

  22. 22

    キーストアエントリが見つかりません。しかし、私はそれがそこにあることを知っています

  23. 23

    Iterableを取得する必要があります、私はディクトのリストを持っています

  24. 24

    mysqlは、Selectステートメントに参加しようとしているこれらのクエリの何が問題になっていますか

  25. 25

    リスト内の各子は、PDF.JSですべてのPDFページをレンダリングするときに、一意の「キー」プロップを持っている必要があります

  26. 26

    どのように私は、フレームにスクロールすると移動していることのJButtonを持っていますか?

  27. 27

    私は基本的なtoDoアプリに取り組んでいます。アイテムを長押しすると、リストから削除されますが、何も実行されません。私は何が間違っているのですか?

  28. 28

    新しいHDD(x3)のディスク書き込みエラー!! 私が多くのことを試したのを手伝ってください。私はそれが一貫して高いビットレートの使用にダウンしていると思います

  29. 29

    bashスクリプトの出力値を正確に返す方法はコマンドを持っています

ホットタグ

アーカイブ