【问题标题】:How to programmatically stop Angular UI accordion from opening on click如何以编程方式阻止 Angular UI 手风琴在点击时打开
【发布时间】:2014-04-19 09:39:29
【问题描述】:

基本上,我想在手风琴打开之前进行一些验证,并且我不想在标题中添加额外的按钮。所以假设有人点击手风琴标题而不是关闭(它最初是打开的),我想添加一些条件代码,如果不满足某些情况,手风琴不会移动/更改/关闭。

我尝试添加一个ng-click="stop()",其中stop()$event.stop = function (e) {e.stopPropagation();},但没有成功。

我也尝试过ng-click="$event.stopPropagation",但也没有成功。

请注意,我更改了指令,而不是仅标题 (h4) 是可点击的,整个手风琴标题是可点击的。

如果我在标题中添加一个按钮并在其上附加e.stopPropagation,它会起作用,但这不是我想要的。

有可能吗?

【问题讨论】:

  • 请发布一些您尝试过的代码。 jsfiddle 不胜感激

标签: angularjs accordion angular-ui angular-ui-bootstrap


【解决方案1】:

angular ui 的accordion 还使用指令collapse(当您的模板加载验证DOM 时,您会在所有手风琴行的手风琴描述中找到它)来决定手风琴内容是否打开。因此,如果您可以访问手风琴指令的范围,则可以解决您的问题。为此,我可以看到 2 种方式

要么你在 Angular-ui 的折叠模板中做一个小改动 .. 即传递 2 个参数 1.根据一些验证决定是否折叠 2.一个控制器变量,在完成所有验证后您将其设置为 true

在 collapse 指令内对变量 2 应用监视,并在完成所有验证后将此变量设置为 true,当它为 true 时,collapse 指令将继续,所有这些自定义工作流只有在您将变量 1 设置为时才会发生TRUE,如果变量 1 为 false,则以上都不会发生,即不等待验证。

第二种情况:

如果您的手风琴有 4 行,即 A、B、C、D,那么

$scope.$$childHead.$$childHead

让您可以访问 A,现在您想要由角手风琴模板插入的折叠指令的范围,因此请继续阅读

 $scope.$$childHead.$$childHead.$$childHead.isOpen

this isOpen 变量是一个 boolean value to collapse 指令此变量决定您的手风琴是否打开并且它是隔离的,即 B、C 和 D 也有自己的 isOpen

访问 isOpen 的 B 做:

$scope.$$childHead.$$childHead.$$nextSibling.isOpen

为 C

 $scope.$$childHead.$$childHead.$$nextSibling.$$nextSibling.isOpen

等等。在这些 isOpen 变量上应用监视并防止它们在您的验证完成之前为真!但是第二种方法可能不是最适合的情况,如果您只想对特定行进行验证,那么它可能仍然有效,但仍然检查适合您的方法。

【讨论】:

  • 我最终使用了不同的解决方案:我已经将每个手风琴行绑定到一个变量,并将is-open=myVariable 添加到每个手风琴行。您的回复给了我一个想法,而不是避免事件传播,而是将手风琴的值重置为 true,并且只有在满足条件后才会更改。希望你明白。无论如何,谢谢你的帮助!
  • @WagnerMatosUK 你能在 ans 或 que 中添加你的解决方案演示链接吗?我面临着类似的问题。
猜你喜欢
  • 2018-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多