当前位置: 首页 > 知识库问答 >
问题:

不能使用*ngIF里面*ngFor: angular2[重复]

幸弘扬
2023-03-14

我使用的是angular2,我正在从一个服务绑定数据,问题是当我加载数据时,我应该用id过滤它,这就是我应该做的:

<md-radio-button
        *ngFor="#item of items_list"
        *ngIf="item.id=1"
        value="{{item.value}}" class="{{item.class}}" checked="{{item.checked}}"> {{item.label}}
</md-radio-button>

这是数据:

[
  { "id": 1, "value": "Fenêtre" ,"class":"md-primary" ,"label":"Fenêtre" ,"checked":"true"},
  { "id": 2, "value": "Porte Fenêtre" ,"class":"" ,"label":"Porte Fenêtre" }

]

顺便说一下,我只想接受id=1的数据,但我看到了这个错误:

EXCEPTION: Template parse errors:
Parser Error: Bindings cannot contain assignments at column 14 in [ngIf item.id=1] in RadioFormesType1Component@10:16 ("
        <md-radio-button
                *ngFor="#item of items_list"
                [ERROR ->]*ngIf="item.id=1"
                value="{{item.value}}" class="{{item.class}}" checked="{{item.check"): RadioFormesType1Component@10:16

那么有什么建议将ngif和ngfor一起使用吗?

共有3个答案

汪鸿志
2023-03-14

*ngif*ngFor在同一个标签上不支持。您需要使用带有显式的长形式

使现代化

而不是<代码>

<ng-container *ngFor="#item of items_list">
  <md-radio-button
        *ngIf="item.id=1"
        value="{{item.value}}" class="{{item.class}}" checked="{{item.checked}}"> {{item.label}}
  </md-radio-button>
</ng-container>

梁存
2023-03-14

另一种解决方案是创建自定义过滤管道:

import {Pipe} from 'angular2/core';

@Pipe({name: 'filter'})
export class FilterPipe {
  transform(value, filters) {

    var filter = function(obj, filters) {
      return Object.keys(filters).every(prop => obj[prop] === filters[prop])
    }

    return value.filter(obj => filter(obj, filters[0]));
  }
}

像这样用在组件中:

<md-radio-button
  *ngFor="#item of items_list | filter:{id: 1}"
  value="{{item.value}}" class="{{item.class}}" checked="{{item.checked}}"> {{item.label}}
</md-radio-button>

需要在组件上注册自定义管道:

@Component({
  // ...
  pipes: [FilterPipe]
})

演示:http://plnkr.co/edit/LK5DsaeYnqMdScQw2HGv?p=preview

邵宏达
2023-03-14

您可以使用以下内容:

*ngIf="item.id===1"

而不是

*ngIf="item.id=1"

您尝试将某些内容分配到id属性(运算符=)中,而不是测试其值(运算符====)。

此外,不支持在同一个元素上同时使用ngFor和ngIf。你可以试着这样做:

<div *ngFor="#item of items_list">
  <md-radio-button
      *ngIf="item.id===1"
      value="{{item.value}}" class="{{item.class}}"
      checked="{{item.checked}}">
    {{item.label}}
  </md-radio-button>
</div>

<template ngFor #item [ngForOf]="items_list">
  <md-radio-button
      *ngIf="item.id===1"
      value="{{item.value}}" class="{{item.class}}"
      checked="{{item.checked}}">
    {{item.label}}
  </md-radio-button>
</template>
 类似资料:
  • 如果我尝试选择存在于ngIF指令中的DOM元素,则该元素为空。如果我删除ngIF,那么我可以选择它。 组件模板中的代码,未找到div: 去掉*ngIf和外部报告div的内容。 ngAfterViewInit是否在数据返回之前运行以确定ngIF发生了什么?我希望ngIF首先运行,而ngAfterViewInit是最后运行的东西。 注意:groupedPatchGroups 值在 ngOnInit 中

  • 问题内容: 我想在一行中使用ngIf和ngFor。我知道这是不可能的,但是还有其他方法可以做到吗? 这是我的代码: 问题答案: 一次只能在一个元素上使用一个结构指令。 作为解决方法,您可以使用未标记到DOM的方法

  • 我正在使用Intellij Idea在MacOS上用Java编写代码。我安装了在官方网站上下载的JDK Java 11。Java工作很好。但是,现在我想使用JavaFX库。 因此,我使用导入JavaFX 但我得到错误:。 所以我搜索了一小段,发现我必须将项目创建为“JavaFX应用程序”,所以我这样做了,但在文件中我得到的消息是: 未配置JavaFX运行时。或者使用内置JavaFX的JDK,或者向

  • 在本例中,我使用Angular并希望使用(从版本4开始可用): 如何使用实现相同的行为?

  • 在下面的代码中,我试图在< code >选项卡下显示所有< code >项目(对象),它们应该基于它们的类别。 类别必须相等。 编辑:如果还不清楚,请看这里。 我正在尝试遍历选项卡并将每个选项卡的名称添加到选项卡的“模板”中。 然后,我尝试遍历项目,如果项目的类别与选项卡的类别匹配,那么它将显示在选项卡下。 出于某种原因,它似乎不起作用。我做错什么了吗?< br >请原谅我和我的逻辑,过去两天一直

  • 切换状态方法 但是,如果我删除*ngIf 将会工作。 理论上,ngIF检查它是否为真。该元素将在DOM上可用。根据我的理解,元素也应该具有非活动状态,因为它没有被触发。单击触发器后,元素将可用,并将具有活动状态。 但是为什么它没有任何动画呢? 有什么工作可以让我使用ngIf和动画吗?