简体   繁体   English

ngFor 循环中的 ngClass,angular 6

[英]ngClass in a ngFor loop, angular 6

I am trying to change the class whit ngClass and ternary operator inside an ngFor, if the boolean value is true i want to use alert-success if the boolean is false i want to use alert-danger.我正在尝试使用 ngFor 中的 ngClass 和三元运算符更改 class,如果 boolean 值为真,我想使用警报成功如果 Z84E2C64F38F78BA3EA5C905AB5A2DA27 为假,我想使用警报成功。 When i insert the firs element true is ok, but when i insert the second element false the first element change in false当我插入第一个元素 true 是可以的,但是当我插入第二个元素 false 时,第一个元素变为 false

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


This is because "tesseraValidita" is a global variable, and when you insert the second value, "tesseraValidita" changes on a global level and this is why the alert changes in both cases.这是因为“tesseraValidita”是一个全局变量,当您插入第二个值时,“tesseraValidita”会在全局级别发生变化,这就是警报在两种情况下都发生变化的原因。 You must isolate this variable and put it in an Array of objects您必须隔离此变量并将其放入对象数组中

 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}}</...>

you'd better operate some more complex structures rather than just strings你最好操作一些更复杂的结构而不仅仅是字符串

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

and than you can use the whole object that you created to draw one item并且您可以使用您创建的整个 object 来绘制一个项目

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

In your ts you need to add tesseraValidita in every object, something like this.在您的ts中,您需要在每个 object 中添加tesseraValidita ,类似这样。

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
    });
}

and then in html it should be something like this.然后在 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>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM