10

我有一个包含 2 个 ng-includes 的 HTML。考虑服务器中是否不存在 ng-include src 之一。到目前为止,它只会加载空白 html,并且在浏览器控制台中会说找不到 http-404 文件。

因此,在这种情况下,我只想将默认错误页面(存在于服务器中)加载到该特定 div 中,即一半显示默认错误页面,另一半显示通过 nginclude 加载的正确 div。

我的逻辑是,我正在使用一个 http 拦截器,我在其中拦截所有 http 调用。每当发生 404 时,我想返回必须仅加载到 div 中的默认错误页面。所以它就像模拟一个正确的http调用但是发送一个错误页面,我假设它必须加载到正确的div。

但这并没有发生:)。我尝试使用默认的 window.load('')。但随后它会加载到页面顶部并跨页面呈现。

或者我应该捕获 div id(如果是这样怎么办?)然后做 tat id 加载默认错误 HTML?

在这方面需要你的想法。

4

2 回答 2

17

To handle this kind of situations you could use http interceptors (find the docs here: $http).

Interceptor has to catch the 404 response, load the 404.html page from your server and set it as a data for the initial response along with the status code 200.

I've created a project that shows how to solve it.

Repository: https://github.com/matys84pl/angularjs-nginclude-handling-404/

Take a closer look at the main.js file.

于 2012-11-28T20:09:25.730 回答
1

我通过在填充 ng-include 值之前直接通过 $http 传递所需的 ng-include url 做了类似的事情。

$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 回答