【问题标题】:Ngx Bootstrap Popover to display only one popover at a timeNgx Bootstrap 弹出框一次只显示一个弹出框
【发布时间】:2018-08-03 03:04:42
【问题描述】:

我正在使用 angular 使弹出框一次只出现一次这是 plunker 我正在使用 angular5 和 Ngx-Bootstrap。

因为我的项目中需要多个弹出框,但是只有在我们按下右上角的 (x) 时才会关闭弹出框。

如果您先按切换按钮,然后按“带有标题和 x 按钮的弹出窗口!”,则切换当前适用于提供的 2 个弹出窗口! 如果弹出窗口当前打开,我的目标是禁用另一个弹出窗口。

例如有 4 个 popover,popover 1-4。 如果弹出框 1 已打开,则无法打开其他弹出框。

如果我们关闭弹出框 1,则可以打开另一个弹出框。

<div>
  <ng-template #popoverContent3>
    <div style="font-size:18px; font-family:'Times New Roman'; font-weight:bold;">
      <p>this is a title...
      <button type="button" (click)='pop2.hide()' class="close" aria-label="Close">
      <span aria-hidden="true">&times;</span>
      </button>
      </p>
    </div>
    <div>
     <p>The best looking pop over, with a TITLE!</p>  
    </div>
  </ng-template>
  <br><br><br><br><br><br><br>
  <a  [popover]="popoverContent3" #pop2="bs-popover" (click)="isOpen = !isOpen" [outsideClick]="false"  placement="right">
   Pop over with title and a x button!
    </a>
</div>
<p>
  <span popover="Hello there! I was triggered by input"
        triggers=""  [isOpen]="isOpen">
  This text has attached popover
  </span>
</p>
<button type="button" class="btn btn-primary"
        (click)="isOpen = !isOpen">
  Toggle
</button>

【问题讨论】:

    标签: angular frontend angular5 popover ngx-bootstrap


    【解决方案1】:

    如果您想一次只看到一个打开的弹出框,可以通过ViewChildrenonShown 实现。

    算法是这样的:

    1) 监听所有onShown 事件

    2) 关闭所有其他弹出框

    @ViewChildren(PopoverDirective) popovers: QueryList<PopoverDirective>;
    
    ngAfterViewInit() {
      this.popovers.forEach((popover: PopoverDirective) => {
        popover.onShown.subscribe(() => {
          this.popovers
          .filter(p => p !== popover)
          .forEach(p => p.hide());
        });
      });
    }
    

    示例 - https://stackblitz.com/edit/angular-zkw9mz?file=app%2Ffour-directions.ts

    【讨论】:

    • 是的,这就是我需要的解决方案,但它在我的项目和我的 plunker 中不起作用。我们是否必须安装一些附加功能? plnkr.co/edit/NPVqrI9aFZRXJhsWRmMj?p=preview@llya Surmay
    • 我在我的项目 localhost/:54 上收到此错误错误:获取错误:404 Not Found Instantiating localhost:8080/Scripts/libs/ngx-bootstrap/popover.js,我可以单独使用带有角度的 stackblitz 代码,但它似乎在那里似乎是视觉工作室的问题
    • 也许这是因为进口。如果你使用system.js(plunkr 使用它),那么你必须从ngx-bootstrap 导入popover,而不是ngx-bootstrap/popover
    • 是的,我正在使用 systemjs,在我的 system.js 中我正在这样做,map:{ 'ngx-bootstrap': 'npm:ngx-bootstrap/' }, packages: { app : { main: './main.js', defaultExtension: 'js', }, //rxjs: { // defaultExtension: false //}, 'ngx-bootstrap': { format: 'cjs', main: ' bundles/ngx-bootstrap.umd.js', defaultExtension: 'js' } },我已经在导入 ngx-bootstrap 而不是 ngx-bootstrap/popover 不是吗?
    • 我明白你的意思,它现在正在工作,非常感谢!!
    猜你喜欢
    • 2018-08-24
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 2012-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多