1

私はすでに http インターセプターを作成しており、私の観察に基づいて、$http サービスを使用するすべてのものにのみ適用されます。テンプレートで使用されている css、html、および js ファイルも傍受したい場合はどうすればよいですか? 出来ますか?

これは、上で述べたインターセプターのコードです。

app.factory('redirectInterceptor', function($q,$location,$window){
return  {
    'response':function(response){
    if (typeof response.data === 'string' && response.data.indexOf("My Login Page")>-1) {
        $window.location.href = "/login.html";
        return $q.reject(response);
    }else{
        return response;
    }
    }
}

});

app.config(['$httpProvider',function($httpProvider) {
    $httpProvider.interceptors.push('redirectInterceptor');
}]);

上記のように、css、html、および js (テンプレート用) のインターセプターを実行できるようにしたいと考えています。

4

3 に答える 3

1

あなたが言ったように、

$http サービスを使用するすべてにのみ適用されます

したがって、html、css、および js ファイルのリクエストを傍受したい場合。クライアントではなく、サーバーで実行するのが最適です。

于 2015-04-15T05:41:22.777 に答える
1

これは古典的な XY 問題です。問題の解決策を考えていますが、それは間違った方法です。

あなたのコメントからのこの行は、実際の問題を説明しています:

私が参照している js ファイルは、プロジェクトのビジネス ロジックです。したがって、それを公開することはオプションではありません。

したがって、あなたの問題は、ログインしていない/できない人にビジネスロジックを公開したくないということです。

これにはいくつかの解決策があります。しかし、結局のところ、UI などに使用される一般的な js コードからビジネス ロジックを分離する必要があります。

js を 2 つの部分 (必ずしも 2 つのファイルである必要はありませんが、少なくとも 2 つのファイルである必要があります。それ以上でもかまいません) に分割したら、共通の js ファイルをパブリックとして公開できます。次に、ビジネス ロジックの読み込みを処理する方法を決定できます。

  1. 失敗させる

    これはおそらく最も単純な戦略です。何もしないと、ロードに失敗します。おそらく、ログインしたページにのみビジネス ロジックが必要なので、ランディング ページやログイン ページにビジネス ロジックがなくても問題はありません。

  2. テンプレートに動的に含める

    ユーザーがログインしていない場合は、ビジネス ロジック js をロードするスクリプト タグを省略します。

  3. JS でビジネス ロジックを動的に読み込む

    AJAX を使用してロードしてから評価するか、require.js を使用するか、jQueryなどを使用getScript()して、ユーザーがログインしている場合にのみビジネス ロジックをロードします。

クリエイティブな人なら、ビジネス ロジック JS の読み込みを処理する方法をさらにいくつか思い付くことができるでしょう。それが何であれ、重要なのは、共通の js ファイルと css ファイルを公開する必要があるということです。

于 2015-04-15T07:14:01.173 に答える
1

あなたはhtmlファイルを傍受することができます

    var requestInterceptor = function (config) {

        if (config.url.indexOf(".html") != -1) {
            //custom logic
        }
   }

上記は機能しませんが.js.cssタグを使用してロードしているためです。

.html ファイルは template-cache に保存され、$http リクエストを起動します...

console.log(config.url)ただし、先に進んで、インターセプターで実行することにより、すべてが要求されていることをテストする必要があります..

于 2015-04-15T05:45:40.513 に答える