如何在不使用过滤器的情况下最好地翻译像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>
还有其他办法吗?
答案 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作为常量字符串 - 将不会创建观察者。