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

ngFor 循环中的 ngClass ,角度 6

宋昕
2023-03-14

我正在尝试更改ngFor中的类whit ngclass和三元运算符,如果布尔值为真,我想使用alaling-成功,如果布尔值为假,我想使用alaling-危险。当我插入第一个元素true是可以的,但当我插入第二个元素false时,第一个元素更改为false

TS

tesseraValidita: boolean;

checkCardValitidy(tesserato: any){
    this._dipendentiMandatariService.getTessere(tesserato.idCRM).subscribe((tessera: Tessera[]) => {
      let valid = false;
      let itemValido: Tessera;
      valid = tessera.some((item: Tessera) => {
          itemValido = item;
          return (item.Stato === 'In Essere' && item.Tipo === 'Autorale' && this.moment(item.DataFineValidita).format('YYYY-MM-DD') > this.moment(new Date()).format('YYYY-MM-DD'));
      });
      if (valid) {
          // this.alertService.info('Verificatore ' + tesserato.denominazione + ' Tessera Valida');
          // this.verificaTessera = tesserato.idCRM + 'Tessera Valida Nr: ' + itemValido.Numero + " scadenza il " + this.moment(itemValido.DataFineValidita).format('DD/MM/YYYY');
          this.tessereVerificateArray.push('Tessera Valida Nr: ' + itemValido.Numero + " scadenza il " + this.moment(itemValido.DataFineValidita).format('DD/MM/YYYY'))
          this.tesseraValidita = true;
          //this.className = 'alert-success'
      } else {
          // this.alertService.error('Attenzione! Accertatore ' + tesserato.denominazione  + '  senza tessera in corso di validità');
          //this.verificaTessera = tesserato.idCRM + 'Attenzione! Accertatore senza tessera in corso di validità' ;
          this.tessereVerificateArray.push('Attenzione! Accertatore senza tessera in corso di validità');
          this.tesseraValidita = false;
          //this.className = 'alert-danger'
      }
    }); 


<div class="pull-right col-md" style="position: absolute; right: 96px; top: 431px;">
                  <div 
                  *ngFor="let tesseraVerificata of tessereVerificateArray; 
                  let i = index" 
                  class="alert" 
                  [ngClass]="tesseraValidita  ? 'alert-success index' +i: 'alert-danger index' +i">
                  {{tesseraVerificata}}
                  </div>
</div>


共有3个答案

汪阳飇
2023-03-14

你最好操作一些更复杂的结构,而不仅仅是字符串

tessereVerificateArray.push({tesseraValidita: true, message: 'Tessera Valida Nr:....'})

然后,您可以使用您创建的整个对象来绘制一个项目

<div *ngFor="let tesseraVerificata of tessereVerificateArray; let i = index"
  [ngClass]="tesseraVerificata.tesseraValidita ? 'alert-success index' +i: 'alert-danger index' +i"
...
> {{tesseraVerificata.message}}</...>
戚鸿
2023-03-14

在您的ts中,您需要在每个对象中添加tes seraValidita,如下所示。

if (valid) {
    this.tessereVerificateArray.push({
        text: 'Tessera Valida Nr: ' + itemValido.Numero + " scadenza il " + this.moment(itemValido.DataFineValidita).format('DD/MM/YYYY'),
        tesseraValidita: true
    });
} else {
    this.tessereVerificateArray.push({
        "text": "Attenzione! Accertatore senza tessera in corso di validità",
        "tesseraValidita": false
    });
}

然后在 HTML 中它应该是这样的。

<div class="pull-right col-md" style="position: absolute; right: 96px; top: 431px;">
   <div 
   *ngFor="let tesseraVerificata of tessereVerificateArray; 
   let i = index" 
   class="alert" 
   [ngClass]="tesseraVerificata.tesseraValidita  ? 'alert-success index' : 'alert-danger index'">
   {{tesseraVerificata.text}}
</div>
</div>
夏朝
2023-03-14

这是因为“tesseraValidita”是一个全局变量,当您插入第二个值时,“tessera Validit”会在全局级别上发生变化,这就是为什么在这两种情况下警报都会发生变化的原因。必须隔离此变量并将其放入对象数组中

 if (valid) {
    this.tessereArray.push({ message: '**example**', valid": true});
 } else {
    this.tessereArray.push({"message": "**example**", "valid": false });
 }

<div *ngFor="let tessera of tessereArray; let i = index"
  [ngClass]="tessera.valid? 'alert-success index' +i: 
 'alert-danger index' +i"
     ...> {{tessera.message}}</...>
 类似资料:
  • 首先,ngfor中的标签没有要关联的标识,也没有要查找的任何其他标识。然而,我没有发现任何需要id的东西,在剑道页面上有许多例子显示了没有id的复选框的例子,所以我不认为这是问题(但肯定可能是错误的)。 其次,它们在ngFor循环中。我不知道为什么这会把它搞砸,但这是我能想到的一切。我搜索了一下,但找不到任何关于这里的问题或如何解决它的东西。 你知道我哪里出了问题或者我没有看到什么吗?我确实记录了

  • 我是angular的新手,我有一个愚蠢的问题,我如何显示*ngfor循环之外的实际项目数? 我使用这样的过滤和分页管道 我知道有一个变量“count”,但当然它只在那个循环中可用,我如何在组件中获得这个变量,我需要创建新的组件,把它放在那个循环中,通过指令传递“count”还是有更简单、更干净的方法?

  • 使用其他文本消息不是一个好方法,因为如果枚举中有数百个值,那该怎么办。我不会在html代码中重复枚举。

  • 问题内容: 我想在ng-repeat属性中调用函数,这是我的代码 示例plnkr html js 当我打开控制台时,我注意到了错误 我的代码的主要目标是在ng-repeat中使用函数来计算每个事件循环中的数据 问题答案: 找到了解决方案:

  • 我是从JSON文件而不是数据库获取数据。我试图根据JSON中的状态值为图标赋色,例如[if green?class1:class2]下面是我的代码。 我的HTML文件 下面是我的JSON文件。 这是我的CSS **我无法更改状态图标的颜色。我得到了这个错误** 错误类型错误:无法读取未定义的属性“status”

  • 我有一个json,包含如下对象数组 在我看来,我想用ngFor呈现json,就像这样 你的名字叫什么? abc 定义 Ghi jkl