Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 更改ng重复上的单个迭代_Javascript_Arrays_Angularjs_Filter_Ng Repeat - Fatal编程技术网

Javascript 更改ng重复上的单个迭代

Javascript 更改ng重复上的单个迭代,javascript,arrays,angularjs,filter,ng-repeat,Javascript,Arrays,Angularjs,Filter,Ng Repeat,我有一个ng重复,它在我的模型中遍历国家的名称。对于某些国家的名称,我希望它们被缩写以缩短字符串的长度,例如,我希望“北爱尔兰”被输出为“N.Ireland” JSON模型 我可以在我的模型中更改名称,但我宁愿保持原样,因为我希望原始数据是完整的。只有在这个特定的例子中,我才想把它缩写 我应该使用ng repeat过滤器吗?如果是,怎么做? 若否,有何其他建议? HTML {{nation.name |大写}} 您可以创建自己的过滤器缩写,应用于名称。在此筛选器中,您可以打开国家名称并返回缩写

我有一个ng重复,它在我的模型中遍历国家的名称。对于某些国家的名称,我希望它们被缩写以缩短字符串的长度,例如,我希望“北爱尔兰”被输出为“N.Ireland”

JSON模型 我可以在我的模型中更改名称,但我宁愿保持原样,因为我希望原始数据是完整的。只有在这个特定的例子中,我才想把它缩写

我应该使用
ng repeat
过滤器吗?如果是,怎么做?
若否,有何其他建议?

HTML

{{nation.name |大写}}

您可以创建自己的过滤器
缩写
,应用于名称。在此筛选器中,您可以打开国家名称并返回缩写格式

app.filter('abbreviate', function() {

    return function(country) {

        switch(country){
            case "Northern Ireland":
                country = "N. Ireland"
                break;
        }

        return country;

    }

});

对于简单的截断,可以使用
limito
过滤器,保持模型不变是有意义的

下面是一个简单的示例(8个字符):


{{nation.name | limito:8 |大写}

像其他人说的那样,编写自己的过滤器

app.filter('abbreviate', function() {

    return function(country) {
        return country.replace(/^(\S)\S*(\s+\S+)/m, "$1.$2");

    }

});
例如:

警报(“北爱尔兰”。替换(/^(\S)\S*(\S+\S+)/m,$1.$2”);
警报(“南非”。替换(/^(\S)\S*(\S+\S+)/m,“$1.$2”);

警报(“美国”。替换(/^(\S)\S*(\S+\S+)/m,$1.$2”)您可以创建自定义过滤器来实现此目的,如下所示:

在HTML中,执行以下操作:

<h3>{{nation.name | myFormat}}</h3>
请注意,根据您的要求,自定义过滤器可以修改,如果您需要处理的字超过2个,我们可以使用for循环。

使用角度过滤器

然后将所有国家/地区名称作为关键字,并使用翻译过滤器

{{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>

{{nation.name | limito:1 |大写}}。{{nation.name.split(“”)[1]}
{{nation.name}

为什么不在服务层中进行修改?您可以对数组使用
map
来应用缩写。您可以编写自己的过滤器并使用它。筛选器可以检查字符串长度,并在需要时应用您的缩写。谢谢,但我不想截断文本,我需要一个特定的筛选器,将第一个单词转换为一个字母,后跟一个“.”(例如“N.Ireland”)@Paulos3000抱歉,我不明白这一点。谢谢-这看起来非常有用。在这种情况下,虽然我想学习如何“手动”操作,可以这么说。是的,在这种情况下,您可以将这些配置作为内部化选项在代码之外,然后对于不同的语言,您可以使用不同的模板,这需要比过滤器多一点的时间,但后来它更干净,更易于维护:)谢谢-我想这就是我想要的。我会接受答案,一旦我有它的工作…完美,只是工作。谢谢“刚果民主共和国”或“前南斯拉夫马其顿共和国”会发生什么情况?您可以根据您想要的输出进行修改。这是一个样品溶液。
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];
    };
});
{{nation.name | translate }}
[
  {
    "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>