使用角度平移而不使用滤波器来转换角度自举指令?

时间:2016-01-11 17:12:39

标签: angularjs angular-translate angular-bootstrap

如何在不使用过滤器的情况下最好地翻译像uib-tab和uib-tooltip这样的角度引导指令?

过滤器添加了很多观察者,所以我不想让它像:

<android.support.design.widget.CoordinatorLayout
    android:id="@+id/main_content"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

          <ListView
              android:id="@+id/lvToDoList"
              android:layout_width="match_parent"
              android:layout_height="match_parent"></ListView>

          <android.support.design.widget.FloatingActionButton
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_gravity="bottom|right"
              android:layout_margin="16dp"
              android:src="@drawable/ic_done"
              app:layout_anchor="@id/lvToDoList"
              app:layout_anchorGravity="bottom|right|end" />

</android.support.design.widget.CoordinatorLayout>

还有其他办法吗?

3 个答案:

答案 0 :(得分:0)

虽然之前的所有评论都是正确的,但如果你真的想避免使用过滤器,可以选择其他方法:

function TranslateAttr($translate) {
  return {
    restrict: 'A',
    link: {
      pre: function (scope, elem, attrs) {
        var attribute = attrs.translateAttr,
            attributeValue = attrs[attribute];

        if (attributeValue) {
          $translate(attributeValue).then(function (translation) {
            attrs.$set(attribute, translation[attributeValue]);
          });
        }
      }
    }
  };
}

现在在你的例子中使用它:

<uib-tab heading="{{'A. Manually add emails'}}" is-open="true" translate-attr="heading">

答案 1 :(得分:0)

您还可以在控制器中使用 $ translate 服务,以便在没有任何 $ filter 的情况下立即进行明确翻译,例如这个: $ translate.instant(你的键),返回字符串/对象取决于你的输入,参见:$translate

.controller('MyCtrl', function($scope, $translate){
   ...
   $scope.translatedTooltip = $translate.instant('tooltip-key');
   ...
});

<uib-tab heading="{{translatedTooltip}}" is-open="true">

答案 2 :(得分:-1)

您可以使用一次性绑定,确保该值不会发生变化:

{{::name | translate}}

http://plnkr.co/edit/NS6XFZGgflWsR9Zk9d5L?p=preview

但是如果你使用filter作为常量字符串 - 将不会创建观察者。