在 ng-repeat 上更改一次迭代
Change one single iteration on an ng-repeat
我有一个 ng-repeat 循环遍历我模型中的国家名称。在某些国家/地区名称上,我希望将它们缩写以减少字符串的长度,例如,我希望 'Northern Ireland' 输出为 'N. Ireland'。
JSON 型号
[
{
"id": 1,
"name": "Italy",
},
{
"id": 2,
"name": "Northern Ireland",
},
{
"id": 3,
"name": "Poland",
}
]
我可以只更改模型中的名称,但我宁愿保留原样,因为我希望原始数据完整。只有在这个特定的例子中我才想把它缩写。
我应该使用 ng-repeat
过滤器吗?如果是,怎么做?
如果没有,还有其他建议吗?
HTML
<md-grid-tile ng-repeat="nation in nationData">
<img src="img/{{nation.name}}.png">
<md-grid-tile-footer>
<h3>{{nation.name | uppercase}}</h3>
</md-grid-tile-footer>
</md-grid-tile>
您可以创建自己的过滤器 abbreviate
并将其应用于名称。在此过滤器中,您可以打开国家名称和 return 缩写格式。
app.filter('abbreviate', function() {
return function(country) {
switch(country){
case "Northern Ireland":
country = "N. Ireland"
break;
}
return country;
}
});
对于简单的截断,您可以使用 limitTo
过滤器,保持模型不变是有意义的。
这是一个简单的例子(8 个字符):
<md-grid-tile ng-repeat="nation in nationData">
<img src="img/{{nation.name}}.png">
<md-grid-tile-footer>
<h3>{{nation.name | limitTo: 8 | uppercase}}</h3>
</md-grid-tile-footer>
</md-grid-tile>
正如其他人所说,编写您自己的过滤器。
app.filter('abbreviate', function() {
return function(country) {
return country.replace(/^(\S)\S*(\s+\S+)/m, ".");
}
});
示例:
alert("Northern Ireland".replace(/^(\S)\S*(\s+\S+)/m, "."));
alert("South Africa".replace(/^(\S)\S*(\s+\S+)/m, "."));
alert("USA".replace(/^(\S)\S*(\s+\S+)/m, "."));
您可以创建自定义过滤器来实现这一点,如下所示:
在 HTML 中执行此操作:
<h3>{{nation.name | myFormat}}</h3>
在您的 js 中,按如下方式定义此文件管理器:
app.filter('myFormat', function() {
return function(x) {
x = x.split(" ");
if(x.length>1){
x = x[0].split("")[0] + ". " + x[1];
return x;
}
else
return x[0];
};
});
请注意,根据您的要求,自定义过滤器可以修改,如果您要处理的单词超过 2 个,我们也可以使用 for 循环。
使用angular
https://angular-translate.github.io/
然后您将所有国家/地区名称作为键,然后您将使用翻译过滤器
{{nation.name | translate }}
并且您可以添加例如英语:
en.json :
[
{
"Italy": "Italy",
"Northern Ireland": "N.Ireland",
"Poland": "Poland",
.....
}
]
你可以试试这个。很简单。
<md-grid-tile ng-repeat="nation in nationData">
<img src="img/{{nation.name}}.png">
<md-grid-tile-footer>
<H3 ng-if="nation.name.split(' ').length > 1">{{ nation.name | limitTo:1 | uppercase }}. {{ nation.name.split(' ')[1] }}</H3>
<H3 ng-if="nation.name.split(' ').length == 1">{{ nation.name }}</H3>
</md-grid-tile-footer>
</md-grid-tile>
我有一个 ng-repeat 循环遍历我模型中的国家名称。在某些国家/地区名称上,我希望将它们缩写以减少字符串的长度,例如,我希望 'Northern Ireland' 输出为 'N. Ireland'。
JSON 型号
[
{
"id": 1,
"name": "Italy",
},
{
"id": 2,
"name": "Northern Ireland",
},
{
"id": 3,
"name": "Poland",
}
]
我可以只更改模型中的名称,但我宁愿保留原样,因为我希望原始数据完整。只有在这个特定的例子中我才想把它缩写。
我应该使用 ng-repeat
过滤器吗?如果是,怎么做?
如果没有,还有其他建议吗?
HTML
<md-grid-tile ng-repeat="nation in nationData">
<img src="img/{{nation.name}}.png">
<md-grid-tile-footer>
<h3>{{nation.name | uppercase}}</h3>
</md-grid-tile-footer>
</md-grid-tile>
您可以创建自己的过滤器 abbreviate
并将其应用于名称。在此过滤器中,您可以打开国家名称和 return 缩写格式。
app.filter('abbreviate', function() {
return function(country) {
switch(country){
case "Northern Ireland":
country = "N. Ireland"
break;
}
return country;
}
});
对于简单的截断,您可以使用 limitTo
过滤器,保持模型不变是有意义的。
这是一个简单的例子(8 个字符):
<md-grid-tile ng-repeat="nation in nationData">
<img src="img/{{nation.name}}.png">
<md-grid-tile-footer>
<h3>{{nation.name | limitTo: 8 | uppercase}}</h3>
</md-grid-tile-footer>
</md-grid-tile>
正如其他人所说,编写您自己的过滤器。
app.filter('abbreviate', function() {
return function(country) {
return country.replace(/^(\S)\S*(\s+\S+)/m, ".");
}
});
示例:
alert("Northern Ireland".replace(/^(\S)\S*(\s+\S+)/m, "."));
alert("South Africa".replace(/^(\S)\S*(\s+\S+)/m, "."));
alert("USA".replace(/^(\S)\S*(\s+\S+)/m, "."));
您可以创建自定义过滤器来实现这一点,如下所示:
在 HTML 中执行此操作:
<h3>{{nation.name | myFormat}}</h3>
在您的 js 中,按如下方式定义此文件管理器:
app.filter('myFormat', function() {
return function(x) {
x = x.split(" ");
if(x.length>1){
x = x[0].split("")[0] + ". " + x[1];
return x;
}
else
return x[0];
};
});
请注意,根据您的要求,自定义过滤器可以修改,如果您要处理的单词超过 2 个,我们也可以使用 for 循环。
使用angular
https://angular-translate.github.io/
然后您将所有国家/地区名称作为键,然后您将使用翻译过滤器
{{nation.name | translate }}
并且您可以添加例如英语: en.json :
[
{
"Italy": "Italy",
"Northern Ireland": "N.Ireland",
"Poland": "Poland",
.....
}
]
你可以试试这个。很简单。
<md-grid-tile ng-repeat="nation in nationData">
<img src="img/{{nation.name}}.png">
<md-grid-tile-footer>
<H3 ng-if="nation.name.split(' ').length > 1">{{ nation.name | limitTo:1 | uppercase }}. {{ nation.name.split(' ')[1] }}</H3>
<H3 ng-if="nation.name.split(' ').length == 1">{{ nation.name }}</H3>
</md-grid-tile-footer>
</md-grid-tile>