10

私は2ng-includesのHTMLを持っています。ng-includesrcの1つがサーバーに存在しないかどうかを検討してください。今のところ、空白のhtmlをロードするだけで、ブラウザコンソールにhttp-404ファイルが見つかりませんと表示されます。

したがって、この場合、デフォルトエラーページ(サーバーに存在する)をその特定のdivにのみロードします。つまり、半分はデフォルトエラーページを表示し、もう半分はngincludeを介してロードされた適切なdivを表示します。

私のロジックは、httpインターセプターを使用しており、すべてのhttp呼び出しをインターセプトします。404が発生するたびに、divにのみロードする必要があるデフォルトのエラーページを返したいと思います。つまり、正しいhttp呼び出しをモックするのと同じですが、代わりにエラーページを送信します。これは、適切なdivにロードする必要があると思います。

しかし、これは起こっていません:)。デフォルトのwindow.load('')で試してみました。ただし、ページの上部に読み込まれ、ページ全体に表示されます。

または、div idをキャプチャして(もしそうならどのように?)、tat idはデフォルトエラーHTMLをロードする必要がありますか?

これであなたの考えが必要です。

4

2 に答える 2

17

この種の状況を処理するには、httpインターセプターを使用できます(ここでドキュメントを見つけてください:$ http)。

インターセプターは404応答をキャッチし、サーバーから404.htmlページをロードして、ステータスコード200とともに初期応答のデータとして設定する必要があります。

それを解決する方法を示すプロジェクトを作成しました。

リポジトリ:https ://github.com/matys84pl/angularjs-nginclude-handling-404/

main.jsファイルを詳しく見てください。

于 2012-11-28T20:09:25.730 に答える
1

ng-include値を入力する前に、目的のng-includeurlを$httpに直接渡すことで、同様のことを行いました。

$http({ url: url, method: "GET", cache: $templateCache}).success(function(data) {
        /* there was a template for this url - set the $scope property that 
         * the ng-include is using
         */
        $scope.templateUrl = url;
    }).error(function () {
        // there was not a template for this url - set the default one
        $scope.templateUrl = defaultUrl;
    });

ここでの秘訣は、$templateCacheをキャッシュ引数として$httpに渡すことです。これは、フェッチされたURLがng-includeが使用するのと同じキャッシュに保存されることを意味します。したがって、有効なテンプレートを見つけてtemplateUrlプロパティに設定すると、 ng-includeは、テンプレートを再度フェッチする必要はありません。

于 2013-08-21T09:12:16.453 に答える