如何在AngularJS中管理加载指令模板的404错误

fra*_*val 6 javascript angularjs

在AngularJS指令中,templateUrl参数是以dinamically方式定义的.

'templates/' + content_id + '.html'
Run Code Online (Sandbox Code Playgroud)

我不想建立规则来检查content_id值是否有效并将其作为404错误管理,即如果模板不存在(服务器在加载模板时返回404错误)加载template/404.html.

我怎样才能做到这一点?

编辑:当前的答案建议使用响应错误拦截器.在这种情况下,我怎么知道响应是加载这个模板?

dfs*_*fsq 6

您将需要编写响应错误拦截器.像这样的东西:

app.factory('template404Interceptor', function($injector) {
    return {
        responseError: function(response) {
            if (response.status === 404 && /\.html$/.test(response.config.url)) {
                response.config.url = '404.html';
                return $injector.get('$http')(response.config);
            }
            return $q.reject(response);
        }
    };
});

app.config(function($httpProvider) {
    $httpProvider.interceptors.push('template404Interceptor');
});
Run Code Online (Sandbox Code Playgroud)

演示: http ://plnkr.co/edit/uCpnT5n0PkWO53PVQmvR?p = preview