【问题标题】:How to order ng-repeat by translated content in Angular.js?如何通过 Angular.js 中的翻译内容订购 ng-repeat?
【发布时间】:2014-12-06 07:03:17
【问题描述】:
是否有一种简单的方法可以通过翻译的字符串对重复元素进行排序?
到目前为止,我使用的是以下模板:
<h3 ng-repeat="scheme in data.schemes | orderBy:'scheme.collectionName':true">
<span class="{{scheme.iconCssClassName || 'glyphicon glyphicon-asterisk'}}"></span>
<a href="#/storage/{{scheme.collectionName}}" translate="storage__{{scheme.collectionName}}"></a>
</h3>
我想通过$translate("storage__" + scheme.collectionName)订购
【问题讨论】:
标签:
javascript
angularjs
internationalization
angular-translate
【解决方案1】:
我创建了一个自定义过滤器,以防您使用 angular-translate ;)
我已经更新了描述,因此您可以在 ng-repeat 中查看如何将其用于您的对象。您也可以将其与简单数组一起使用。
/**
* orderByTranslated Filter
* Sort ng-options or ng-repeat by translated values
* @example
* ng-repeat="scheme in data.schemes | orderByTranslated:'storage__':'collectionName'"
* @param {Array|Object} array or hash
* @param {String} i18nKeyPrefix
* @param {String} objKey (needed if hash)
* @return {Array}
*/
app.filter('orderByTranslated', ['$translate', '$filter', function($translate, $filter) {
return function (array, i18nKeyPrefix, objKey) {
var result = [];
var translated = [];
angular.forEach(array, function(value) {
var i18nKeySuffix = objKey ? value[objKey] : value;
translated.push({
key: value,
label: $translate.instant(i18nKeyPrefix + i18nKeySuffix)
});
});
angular.forEach($filter('orderBy')(translated, 'label'), function(sortedObject) {
result.push(sortedObject.key);
});
return result;
};
}]);