【问题标题】:Load directive based on translation string基于翻译字符串的加载指令
【发布时间】:2016-01-26 08:41:58
【问题描述】:

所以我想根据来自 angular-translate 的翻译在 html 页面中插入一个指令。 假设我有这两个指令:

.directive('englishText', function() {
  return {
    template: 'Hello'
  };
});
.directive('spanishText', function() {
  return {
    template: 'Hola'
  };
});

我有这两个 json 文件,翻译将从中来:

english.json
{
"LANGUAGE" : "english-text"
}

spanish.json
{
"LANGUAGE" : "spanish-text"
}

所以在 html 页面上我想要这样的东西:

<div {{'LANGUAGE' | translate}}></div>

但作为输出,我只是得到这个:

<div {{'language' | translate}}></div>

而不是

<div english-text>Hello</div>

我也试过这个:

<{{'LANGUAGE' | translate></{{'LANGUAGE' | translate}}>

但我得到这个作为输出

<english-text>

它的解释就像一个 innerHTML 而不是一个标签...

【问题讨论】:

  • 你为什么要这个,这似乎是非常糟糕的做法。除此之外,您不能在模板中执行此操作,您需要在 $compile()s 子指令的父指令中执行此操作
  • 您应该有 1 个可以处理所有翻译的指令,而不是每个翻译的不同指令。除了语言,英语指令与西班牙语指令有何不同?
  • @Rhumborl 它与模板没有什么不同......我只是简化了问题,所以只有要点应该在那里......

标签: javascript angularjs angularjs-directive angular-translate


【解决方案1】:

如果您坚持按照您要求的方式执行此操作,则父指令将 $compile 一个基于语言的指令并将内部 html 替换为新指令

.directive('languageDirective', function($compile) {
    return {
        restrict: 'EA',
        link: linkFn,
        scope: {
            language: '@'
        }
    };

    function linkFn(scope, element, attrs) {
        element.html(
            $compile(getTemplate)($scope)
        );
    }

    function getTemplate() {
        if(scope.language === 'english')
            return '<div english-directive></div>'
        else
            return '<div other-directive></div>'
    }
});

【讨论】:

猜你喜欢
  • 2016-10-15
  • 1970-01-01
  • 1970-01-01
  • 2011-11-03
  • 2010-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多