我希望获得如下的本地化模板:
'/templates/en/main/index'
'/templates/fr/main/index'
所以每次我有一个templateUrl,我将它包装在一个函数中,该函数依赖于带有类似的语言环境的全局变量:
templateUrl: function(){ return localizePath('/templates/main/index'); }
// returns '/templates/locale/main/index' depending on he locale
我必须通过ajax调用检索语言环境,所以我显然需要暂停状态激活。我尝试了以下但它并没有阻止路由器尝试获取模板:
var initialized = false;
$rootScope.$on('$stateChangeStart', function(event, toState, toParams) {
if (!initialized) {
event.preventDefault();
return sessionSvc.getLocale.then(function() {
initialized = true;
$state.go(toState, toParams);
});
}
});
然后路由器尝试在以下路径获取模板:'/templates/undefined/main/index'
。
如何在尝试获取模板之前让ui-router等待?
答案 0 :(得分:3)
templateUrl
函数不能以异步方式工作,但您可以使用返回已解析模板的templateProvider
函数并通过{{1}等待此调用来执行此操作属性。如果您只需要这一次,最好的方法是在根状态下定义您的解析并通过服务缓存结果值。
有关如何实施该问题的详细信息,请参阅此答案:ui-router: async data in templateUrl function