2016-07-26 97 views
1

后,我想获得本地化的模板,如:加载UI模板路由器解决的承诺

  • '/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调用来检索语言环境,所以我显然需要暂停状态激活。我尝试以下,但它不阻止路由器尝试获取模板:

​​

路由器随后试图在以下路径来获取模板:'/templates/undefined/main/index'

如何在尝试获取模板之前让ui路由器等待?

+1

这不会帮助你解决问题的模板。但我建议,不要试图为每个位置设置一个模板,而是使用不同语言的字典并根据所选语言环境加载不同的字典,请查看https://github.com/angular-translate/angular -translate –

回答

3

templateUrl函数不能以异步的方式工作,但您可以使用templateProvider函数执行此操作,该函数返回已解析的模板并通过resolve属性等待此调用。如果您只需要这一次,最好的方法是可能在根状态中定义您的决心并通过服务缓存结果值。

看到这个答案,详细了解你如何能实现它:ui-router: async data in templateUrl function

+0

非常感谢你:) – apneadiving