Angular UI Bootstrap - 当从DOM中删除触发元素时,无法删除popover

时间:2016-09-07 15:57:42

标签: angularjs angular-ui-bootstrap popover destroy

我正在使用一个javascript库,在更新某些数据时会向DOM添加/删除元素 要向DOM添加新元素,它会调用返回元素的模板函数。在我的例子中,模板函数在angular指令中定义并返回类似return $compile(html)(scope)[0];的内容,因为我需要在添加的元素中使用UI Bootstrap Popover指令。
对于Popover,我需要使用popover-append-to-body="true"

我的问题是,如果从DOM中删除了触发元素,则永远不会删除弹出窗口。因此,如果我们添加一个新的触发元素,则第二个弹出框将附加到正文等。

以下是一个简化示例:http://plnkr.co/edit/AFsXBcaLBAs0F2garbAu?p=preview
单击“单击”按钮打开弹出框,单击“删除”删除“单击”按钮,单击“添加”重新添加“单击”按钮,再单击“单击”再添加第二个弹出窗口到DOM。

如何从DOM中删除触发元素时删除Popover指令?
我需要完全删除它,不仅要隐藏它/从DOM中删除它(我可以用popover-is-open隐藏它,但是当它被设置回true时,我看到弹出窗口仍然存在)。
有没有办法在要删除的元素的Popover指令上调用destroy?

1 个答案:

答案 0 :(得分:0)

你不应该在JS和HTML中使用控制器进行DOM操作,这就是指令的原因,对于你的情况,你可以使用一些内置的指令。

  1. 你应该保留一个数组来表示你的按钮和弹出状态
  2. 您应该将所有JS代码放在控制器中,并使用ng-click将点击事件绑定到控制器中的函数
  3. 如果您有onclick
  4. ,请不要使用ng-click
  5. 角度API与vanilla JS甚至jquery完全不同,所以不要混用它们,使用Angular为您提供的内容,请参阅文档以获取帮助。
  6. Here is your "revamped" code