如何在循环 angular 中激活组件?

How to activate component in loop angular?

我有一个模板:

    <div *ngFor="let order of orders" (click)="showReglamentList =! showReglamentList">
       <app-dropdown-reglaments *ngIf="showReglamentList" [depid]="order.depId"></app-dropdown-reglaments>
    </div>

当用户点击行时它会切换 showReglamentList,因此组件 app-dropdown-reglaments 被激活。

但现在它会根据服务器请求激活每一行(循环)中的所有组件。

我可以这样解决:

    let rowComponentVisibility = {};
    orders.foreach((item, index) => rowComponentsVisibility[index] = false);

然后使用:

*ngIf="rowComponentsVisibility[index]"

问题是我尝试缓存它,并且不再初始化组件,只是 hide/show 如果它之前被初始化过。

如何解决?

您希望在点击时加载组件,ngIf 是一个不错的选择。下面我使用 rowComponentsLoad 数组来跟踪要加载的组件。要显示/隐藏,您可以使用 ngClass 并切换“隐藏”class。您跟踪显示在第二个数组 rowComponentsVisibility 中的内容。

<div *ngFor="let order of orders; let i=index;" (click)="loadOrder(i)">
   
    <app-dropdown-reglaments *ngIf="rowComponentsLoad[index]" ngClass="{ 'hide': rowComponentsVisibility[i] }></app-dropdown-reglaments>

</div>

组件

loadOrder(index) {
    this.rowComponentsLoad[index] = true;
    this.rowComponentsVisibility[index] = true;
    hideVisibilityBut(index);
}
hideVisibilityBut(index) {
    for(for i=0;i<this.rowComponentsVisibility.length;i++) {
        if(i!==index) {
            this.rowComponentsVisibility[index] = false;
        }
    }
}

css

.hide {
    display: none;
}