gpt4 book ai didi

javascript - Angularjs:在数组上映射 Angular 过滤器

转载 作者:行者123 更新时间:2023-11-27 23:14:14 33 4
gpt4 key购买 nike

假设我有一个 Angular 过滤器translate,它对字符串进行处理 - 不管是什么 - 以及一个过滤器sort,它按字母顺序对内容进行排序(如 orderBy : 'toString()').

我现在想从字符串数组 str 中打印出字符串,但根据它们的翻译进行排序。也就是说,我想让以下 html 代码起作用:

<div ng-repeat="s in strs | translate | sort">{{ s }}</div>

它不起作用 - 我认为这是因为 translate 是一个作用于字符串的过滤器,有点像签名 String → String。但我需要它对字符串数组起作用,对吗?有点像签名 [String] → [String],对吧?如果这是真的,我需要找到一种方法在该 Angular 表达式中映射 translate 到数组,例如 strs

我怎样才能做到这一点,或者以 Angular 方式优雅地实现我想要的东西?

示例。假设 translate 将字符串 'a''b''c' 发送到 'z'分别为 'y''x'。然后,我希望上面的 Angular 增强 html 元素生成等效的 html 输出:

<div>c</div> <div>b</div> <div>a</div>

最佳答案

如果您的翻译库不支持数组上的翻译,我会为此目的向您的项目添加一个新的过滤器:

angular.module("mymodule", ["pascalprecht.translate"]);
angular.module("mymodule").config(function($translateProvider) {
// Set up message keys
$translateProvider.translations('en', {
A: 'Apple',
B: 'Banana'
})
}).run(function($translate) {
// Select language
$translate.use("en");
})
/**
* @filter translateArray
* @description Convert an array of message IDs
* to an array of translations using the `$translate` service
* @param {Array<String>} translationIDs - An array of message keys
* @returns {Array<String>} - An array of translated strings.
*/
.filter("translateArray", function($translate) {
return function(translationIDs) {
return translationIDs.map(function(id) {
return $translate.instant(id);
})
};
}).controller("demoController", function($scope) {
// Template will translate then sort. Should give:
// Apple, Banana
$scope.strs = ["B", "A"];
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-translate/2.10.0/angular-translate.min.js"></script>

<body ng-app="mymodule">
<div ng-controller="demoController">
<div ng-repeat="s in (strs | translateArray | orderBy:'toString()')">{{s}}</div>
</div>
</body>

关于javascript - Angularjs:在数组上映射 Angular 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35946069/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com