AngularJS - 引导弹出框,如何在ng-repeat中正确使用"popover-is-open"



>我有一个ng-repeat,它可以在表格中生成项目列表, 每个项目的行中都有一个按钮,该按钮将打开一个弹出框(用于编辑对象(。

重要的是,我不要使用引导弹出框的click-outside属性,因为此弹出框必须仅使用其中的按钮关闭。

因此,在具有 ng-repeat 的<div>上声明弹出窗口的 HTML 代码中,我们有以下代码:

<div class="popoverX" popover-class="popoverCustom" 
popover-append-to-body="true" popover-placement="bottom-left"
popover-is-open="vm.isEditPopoverOpen" 
uib-popover-template="'Views/xxx/popTemplate.htm'">

在控制器中,这是定义的:

isEditPopoverOpen: boolean;

我们在弹出窗口中拥有的关闭功能是:

closePopover() {
this.loading = false;
this.isEditPopoverOpen= false;      
}    

因此,当我们在 ng-repeat 中只返回一个项目时,一切正常,但 OFC 并非如此,所以目前,当您单击打开弹出窗口的行div时,每行的每个弹出窗口都会打开。

我明白为什么会发生这种情况,因为我使用相同的布尔值, 但是解决方案是什么呢?

我需要这个结构来保持,所以弹出窗口必须只用一个按钮关闭, 我想避免在 ng-repeat 中循环的数组中的对象上添加一个新属性,例如 :isOpened: boolean,然后将其用于打开/关闭。

如果有任何其他解决方案,我将很高兴听到他们!

如果你真的不想在对象上分配新的属性,你可以像这样保留一个单独的打开/关闭的弹出框数组;

vm.openedPopovers = [];

在您的标记中,您可以像这样访问中继器中的$index;

<div class="popoverX" popover-class="popoverCustom" 
popover-append-to-body="true" popover-placement="bottom-left"
popover-is-open="vm.openedPopovers[$index]" 
uib-popover-template="'Views/xxx/popTemplate.htm'">

最新更新