仅当满足条件时,使用*ngFor迭代JSON的元素。

7 浏览
0 Comments

仅当满足条件时,使用*ngFor迭代JSON的元素。

我正在开发一个使用Angular 4的项目,通过服务调用JSON数据,一切工作都非常顺利,除了一个问题:我的JSON数据有以下简化的结构以便理解问题:

{

"animals": [

{

"name": "dog",

"subgroup": "vertebrate",

"class": "mammal"

},

{

"name": "pig",

"subgroup": "vertebrate",

"class": "mammal"

},

{

"name": "cat",

"subgroup": "vertebrate",

"class": "mammal"

},

{

"name": "snake",

"subgroup": "vertebrate",

"class": "reptile"

},

{

"name": "lizzard",

"subgroup": "vertebrate",

"class": "reptile"

},

{

"name": "crocodile",

"subgroup": "vertebrate",

"class": "reptile"

}

]

}

我想只迭代具有"class"为"reptile"的对象。我创建了以下结构:

{{reptiles.name}}

{{reptiles.class}}

但是问题是它会迭代三个空的,对应于哺乳动物,我希望这些对象不被迭代,只迭代具有"class"为"reptile"的对象。我该如何实现这个目标?

0
0 Comments

问题描述:如何使用*ngFor迭代JSON元素,只有当它们满足条件时才迭代。

问题原因:用户想要在Angular中使用*ngFor指令来迭代JSON元素,但是只想迭代满足特定条件的元素。然而,*ngFor指令本身并不支持条件过滤。

解决方法:用户可以使用*ngFor指令和*ngIf指令结合起来实现条件迭代。具体步骤如下:

1. 创建一个过滤函数,用于根据给定条件过滤JSON元素。

filterItemsOfType(type){
    return this.items.filter(x => x.class == type);
}

2. 在HTML模板中使用*ngFor指令和*ngIf指令。在*ngFor指令中调用过滤函数,并在*ngIf指令中设置条件。

{{item.name}}

这样,只有满足条件的JSON元素才会被迭代和显示。

相关链接:

- [Stack Overflow上的解决方案](https://stackoverflow.com/questions/42931735)

0
0 Comments

问题的原因是在使用*ngFor循环遍历JSON元素时,只有满足某个条件的元素才需要被迭代。解决方法有两种:

第一种方法是使用代替

进行迭代,如下所示:


    

使用标签进行迭代时,模板将不会为每个元素创建DOM节点,从而解决了问题。

第二种方法是在组件中进行过滤,并只将需要显示的数据传递给模板,如下所示:

// 在接收到动物数据后,在控制器中进行过滤
this.reptiles = this.animals.filter(a => a.class === "reptile");
// 模板中进行迭代
...

也可以编写一个filterBy管道,或者从现有库(如ngx-pipes)中使用一个。但要注意,Angular不鼓励使用管道,因为它容易导致性能问题。

此外,还有一条提示是将ngFor指令写在ng-container上,否则可能会导致相同的问题。

原文中还提到了一个问题是通过上述简单的修复方法,仍然会迭代空的哺乳动物

元素,原因是ng-container的条件是在迭代之后应用的,它首先迭代所有对象,然后才应用条件来显示或隐藏ng-container。对于这个问题,可以在组件中对数据进行过滤来解决。原文还提到作者是在几个月前才开始使用Angular,对于一些内容还不了解。

以上就是关于如何只在满足条件时使用*ngFor循环遍历JSON元素的问题的原因和解决方法的整理。

0
0 Comments

问题出现的原因是在使用*ngFor循环遍历JSON元素时,希望只有当元素满足特定条件时才进行遍历。然而,*ngFor指令本身并没有提供过滤功能,因此需要在组件中对数据进行筛选。

解决方法是在组件中使用filter()方法对数据进行筛选,然后将筛选后的结果赋值给一个新的变量。在HTML模板中,使用这个新变量进行*ngFor循环遍历。

下面是解决方法的示例代码:

在组件中的代码:

this.filteredAnimals = this.animals.filter(animal => animal.class === "reptile");

在HTML模板中的代码:


  

通过这种方法,只有满足条件(class为"reptile")的动物元素才会被遍历和显示在HTML模板中。

希望这能帮到你。

0