ng-template 不会在数据变空时触发

ng-template wont trigger when data gets empty

我正在使用一个列表 ul 来显示数组中的数据,该数组最初是空的,为此我使用了另一个模板 "empty" 这里的模板是代码:

<ul class="list-group" *ngIf="data else empty">
  <li *ngFor="let num of data">
    <span>{{num}}</span>
  </li>
</ul>

<button class="btn btn-sm btn-primary" (click)="fillData()">Fill</button>
<button class="btn btn-sm btn-primary" (click)="clearData()">clear</button>

<ng-template #empty>
  <span>.... list empty....</span>
</ng-template>

现将上述代码脚本如下

export class QlistComponent implements OnInit {

  data: any[];

  fillData() {
    this.data = [1, 2, 3];
  }

  clearData() {
    this.data = [];
  }

}

问题: 由于某些奇怪的原因 #empty 模板仅在开始时数据为空时触发一次,但一旦数据填充 fillData() 然后再次清除 clearData() #empty 模板不会被触发

*ngIf表达式检查data.length不是数据:

<ul class="list-group" *ngIf="data.length else empty">
      <li *ngFor="let num of data">
        <span>{{num}}</span>
      </li>
    </ul>

在你的情况下 *ngIf 检查数组是否存在。清除数据后,引用仍然存在 CODE EXAMPLE

您好试试下面的代码:

在 .html 文件

<ul class="list-group" *ngIf="data.length>0 else empty">
  <li *ngFor="let num of data">
    <span>{{num}}</span>
  </li>
</ul>

<button class="btn btn-sm btn-primary" (click)="fillData()">Fill</button>
<button class="btn btn-sm btn-primary" (click)="clearData()">clear</button>

<ng-template #empty>
  <span>.... list empty....</span>
</ng-template>

.ts 文件

data: any[]=[];

  fillData() {
    this.data = [1, 2, 3];
  }

  clearData() {
    this.data = [];
  }