代码之家  ›  专栏  ›  技术社区  ›  Matias Diez

当变量设置为0时,*ngIf为什么不起作用?

  •  1
  • Matias Diez  · 技术社区  · 7 年前

    我有3个输入字段 [(ngModel)] 到3个变量。

    然后我有一个隐藏按钮,只有当所有3个变量都有值时才会出现,使用 *ngIf . 查看代码:

    <mat-form-field>
        <input matInput [matDatepicker]="picker" placeholder="Fecha" [(ngModel)]="matchDay">
        <mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
        <mat-datepicker #picker></mat-datepicker>
    </mat-form-field>
    <mat-form-field>
            <input matInput placeholder="Hora" type="number" min='00' max='23' [(ngModel)]="matchHours">
    </mat-form-field>
    <mat-form-field>
            <input matInput placeholder="Minutos" type="number" min='00' max='59' [(ngModel)]="matchMinutes">
    </mat-form-field>
    <div class="button-row" *ngIf="matchHours && matchDay && matchMinutes">
            <button mat-raised-button color="accent" (click)="setMatchDate()">Set Date</button>
    </div>
    

    问题是,如果“matchHours”或“matchMinutes”的值为0或00,“Set Date”按钮不会显示为 *ngIf公司 不符合条件。

    你知道这里会发生什么吗?

    以下是ts代码:

    export class CreateMatchComponent implements OnInit {
    
      matchDay: Date;
      matchHours: number;
      matchMinutes: number;
    
    setMatchDate() {
        let parsedDate = this.matchDay.toISOString().split('T');
        this.match.matchDate = this.createFormattedMatchDate(parsedDate[0], this.matchHours, this.matchMinutes);
        console.log(this.match.matchDate);
      }
    
      createFormattedMatchDate(parsedDate: string, hour: number, minute: number) {
        minute = pad(minute);
        hour = pad(hour);
        function pad(n) {
          return (n < 10 && n >= 0) ? ("0" + n) : n;
        }
        let formattedDate = parsedDate + "T" + (hour + 3) + ":" + minute + ":00";
        return formattedDate; 
      } 
    }
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Abel Rohan Sampat    7 年前

    由于0在javascript中被认为是虚假的,所以*ngIf将其视为false,并且您的按钮不会出现。您可以使用字符串类型值“0”,这样它就不会被视为false。

    有关falsy的更多信息,请参阅: https://developer.mozilla.org/en-US/docs/Glossary/Falsy