我有以下服务,可用于在AngularJS应用程序中提取状态模板:
.factory('templateService', ['$templateRequest', '$translate', function($templateRequest, $translate) {
return {
getTemplate: function(stateParams, url) {
return $templateRequest( 'partials/' + url + '-' + ( $translate.use() ? $translate.use() : $translate.preferredLanguage ) + '.html');
}
}
}]);
它正在使用中:
.state('section3',
{
parent: 'maincontent',
url: '/section3',
views: {
'header@maincontent': {
templateUrl: 'partials/section3/_header.html'
},
'content@maincontent': {
templateProvider: function($stateParams, templateService) {
return templateService.getTemplate($stateParams, '/section3/_content');
}
}
}
})
从服务中可以看到,我从$ translate模块传递了一些额外的信息来加载特定于语言的模板,但是,如果该模板不存在,那只是一个错误。
我想做的是,如果模板不存在,则捕获错误,然后加载回退。
类似于以下内容:
var request = $templateRequest( 'partials/' + url + '-' + ( $translate.use() ? $translate.use() : $translate.preferredLanguage ) + '.html');
if(request)
return request;
else
return $templateRequest( 'partials/' + url + '-fallback.html');
如何检查$ templateRequest是否成功?由于上述代码无法立即使用。
我发现由于$ templateRequest是一个Promise,我可以使用以下命令捕获错误:
.factory('templateService', ['$templateRequest', '$translate', '$compile', function($templateRequest, $translate, $compile) {
return {
getTemplate: function(stateParams, url) {
$templateRequest('partials' + url + '-' + ( $translate.use() ? $translate.use() : $translate.preferredLanguage ) + '.html')
.then(function(response){
return $compile(response);
})
.catch(function(){
return $templateRequest('partials' + url + '-en.html');
});
}
}
}]);
但是,即使使用$ compile,也意味着返回的模板没有用于
then
或catch
。所以现在这些模板根本就没有用过... 最佳答案
我认为您错过了templateService.getTemplate
的回报。
.factory('templateService', ['$templateRequest', '$translate', '$compile', function($templateRequest, $translate, $compile) {
return {
getTemplate: function(stateParams, url) {
return $templateRequest('partials' + url + '-' + ( $translate.use() ? $translate.use() : $translate.preferredLanguage ) + '.html')
.then(function(response){
return $compile(response);
})
.catch(function(){
return $templateRequest('partials' + url + '-en.html');
});
}
}
}]);
关于javascript - AngularJS中的templateRequest后备,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35157587/