【问题标题】:How to open one popup at a time and close popup on outside click in angular2如何在angular2中一次打开一个弹出窗口并在外部单击时关闭弹出窗口
【发布时间】:2019-04-04 06:50:47
【问题描述】:

我有一个弹出窗口,必须一次打开一个。它必须打开最近单击的一个并隐藏以前单击的一个。 它也不会在外部点击时关闭。 谁能帮我解决这个问题?

HTML:

<td>
          <a (click)="editCondition(rowData)">
            <i class="fa fa-ellipsis-h" style="color:#0847a1"></i>
          </a>
          <div class="switch-list" id="switch-list" *ngIf="rowData.isViewDetails">
            <a id="ccd_viewdetails" (click)="gotoViewDetails(rowData)">View Details</a>
            <a>Download</a>
          </div>
        </td>

TS:

 editCondition(rowData) {
    console.log(rowData);
    rowData.isViewDetails = !rowData.isViewDetails;
  }

这是工作演示:

https://stackblitz.com/edit/angular-c16wte?file=src/app/app.component.ts

【问题讨论】:

    标签: javascript angular


    【解决方案1】:

    只需重置所有itemsccdList

    需要对你的函数进行一些小改动editCondition

     editCondition(rowData) {
        this.ccdList.forEach(item=>{
          item.isViewDetails = false;
        })
        console.log(rowData);
        rowData.isViewDetails = !rowData.isViewDetails;
      }
    

    外部点击使用HostListener

    @HostListener('document:click', ['$event'])
      windowClick($event) {
        let exceptElementFound = false;
        Object.keys($event.target.classList).forEach(key => {
          if ($event.target.classList[key] == "fa-ellipsis-h") {
            exceptElementFound = true;
          }
        })
        if (!exceptElementFound) {
          this.ccdList.forEach(item => {
            item.isViewDetails = false;
          })
        }
      }
    

    工作副本在这里 - https://stackblitz.com/edit/angular-bbyz8n

    【讨论】:

    【解决方案2】:

    您可以尝试在您的应用中使用HostListener

    @HostListener('document:click', ['$event'])
    clickOutside(){
      // do something
    }
    

    【讨论】:

    • 感谢您的回复,怎么样?看过那个演示吗?
    • 我看到了你的演示,你可以做的是维护一个对应的arrayboolean 最初是false。当您单击其中一个弹出窗口时,您将数组的index 传递给您的处理程序,这会将您的数组reset 传递给false,并且仅将true 设为index。您可以在 .html 中使用 ngIf 来隐藏和显示。点击外部,可以使用HostListener
    猜你喜欢
    • 2023-02-09
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    • 2012-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    相关资源
    最近更新 更多