【问题标题】:How to activate component in loop angular?如何以循环角度激活组件?
【发布时间】:2020-07-07 12:38:12
【问题描述】:

我有一个模板:

    <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]"

问题是我尝试缓存它,并且不再初始化组件,只是隐藏/显示它之前是否已初始化。

如何解决?

【问题讨论】:

  • 你能解释一下吗,你的意思是什么?
  • 如果我理解正确:你有一个订单列表,当你点击一个订单时,它应该请求一些详细信息并显示它们?问题是当你点击一个加载每个订单时?如果问题只是缓存组件,您应该使用 css 可见性(例如,使用带有 rowComponentsLoaded 的 ngIf 并在 rowComponentSVisibility 上使用 ngClass 设置可见性)
  • 是的,但是第一次应该加载组件(请求发送),第二次我只需要/显示/隐藏它
  • 可能是用ViewChild?

标签: angular angular-ng-if


【解决方案1】:

您希望在单击时加载组件,ngIf 是一个不错的选择。下面我使用 rowComponentsLoad 数组来跟踪要加载的组件。要显示/隐藏,您可以使用 ngClass 并切换“隐藏”类。您跟踪第二个数组 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;
}

【讨论】:

  • 也许可以使用 ViewChild?
  • 你能解释一下`hideVisibilityBut(index);`吗?
  • ViewChildren 因为你有一个列表,是的,它也应该可以工作。您还可以处理加载组件本身内部的可见性(实际上可能是最简单的方法)
  • 如何结合this.rowComponentsVisibilitythis.rowComponentsLoad
  • 对,如果您可以访问 app-dropdown-reglaments,那么您可以选择是否使用 css stackoverflow.com/questions/50458920/… 显示它
猜你喜欢
  • 2021-02-05
  • 1970-01-01
  • 2021-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-06
相关资源
最近更新 更多