有没有办法设置默认"超时"对于模板加载?
我的模板说"待定"一分钟后(Chrome>网络标签)。这是一个间歇性的问题......每隔一段时间,模板就会花费无限的时间来加载。
我希望能够处理错误而不是无限期地等待我的页面加载。
答案 0 :(得分:2)
没有明显的方法可以做到这一点。当您提供templateUrl
时,发出的$http
请求没有timeout
属性。要取消,您需要进行自己的$http
来电。
这可以使用templateProvider
属性。您可以将此功能包装在服务中,以减少其混乱:
.factory("viewTemplateSvc", function($http, $templateCache){
return {
get: function(url, timeout){
return $http
.get(url, {
cache: $templateCache,
headers: { Accept: 'text/html' },
timeout: timeout // timeout in milliseconds
})
.then(function(response) {
return response.data;
}); {
}
}
})
.config(function($stateProvider){
$stateProvider
.state("stateA",
{
templateProvider: function(viewTemplateSvc){
return viewTemplateSvc.get("views/stateA.html", 2000);
},
// etc...
});
})
这当然是相当混乱而且不是很干。当然,您可以依赖某些默认超时,但您需要为每个州指定templateProvider
。
避免这种情况的一种方法是使用$stateProvider.decorator
并用templateUrl
替换templateProvider
的每次出现:
$stateProvider.decorator("views", function(state, viewsFn){
var views = viewsFn(state);
angular.forEach(views, function(config, name){
if (config.templateUrl){
var url = config.templateUrl;
config.templateUrl = undefined;
config.templateProvider = function(viewTemplateSvc){
return viewTemplateSvc.get(url, 2000);
}
}
});
return views;
});
然后,您可以像以前一样继续使用templateUrl
。