路由时在config中的templateUrl上应用条件

时间:2017-07-25 11:52:53

标签: javascript angularjs angular-ui-router user-experience angular-translate

我正在使用ui-router并使用angular-translate开发了一个多语言网站 但是目前我被困在我想要的地方:

  1. 单个页面将有2个模板,其中一个是正常版本,它将是英语并作为普通站点工作,第二个模板将由translate=""属性组成,换句话说,完全翻译页面。但是我愿意,如果我在路由时可以有条件,那么这将解决我的问题。 查看代码可以让您更容易理解。
  2. 目前我的代码如下:

    .state('whoweAre', {
                url: '/about-us',
                templateUrl: 'templates/whoweAre/whoweAre.html', 
                controller: 'whoweAreCtrl'
            }
        )
    

    但现在我想要像

    这样的东西
        .state('whoweAre', {
                url: '/about-us',
                templateUrl: function(isTranslated){
                 if(isTranslated){
                  return "templates/translated/whoweAre/whoweAre.html";
                 }
                 else{
                   return "templates/whoweAre/whoweAre.html";
                 }
                }, 
                controller: 'whoweAreCtrl'
            }
        )
    

    但这似乎没有用,我在app.js中有这个isTranslated变量,我无法在config(routes.js)文件中访问它。 任何与此相关的工作都会很棒。 我正在使用这个,因为当用户第一次到达时,角度翻译文本似乎是空的,标签出现时带有空标签,这导致了糟糕的用户体验。 任何帮助,将不胜感激。 谢谢!

2 个答案:

答案 0 :(得分:1)

您可以在 app.js

中找到当前状态并动态设置模板

app.js 中查看状态

string comparison

=

    is equal to

    if [ "$a" = "$b" ]

    Caution 

    Note the whitespace framing the =.

    if [ "$a"="$b" ] is not equivalent to the above.
==

    is equal to

    if [ "$a" == "$b" ]

答案 1 :(得分:0)

经过更多的研究,我发现这种方式很有用。感谢大家的帮助。

templateProvider:
  function(AppService) {
    if(AppService.getLocal("language").locale != 'en' )
    return "translated template url";
    else
    return "normal page"
  }