【问题标题】:Find all elements in an Angular directive查找 Angular 指令中的所有元素
【发布时间】:2015-02-12 20:39:57
【问题描述】:

我正在尝试在纯 Angular 中实现类似于手风琴的东西。

我有一个常见问题列表,其中隐藏了答案(通过 css 显示:无;)。我希望它能够工作,以便当您单击问题时,会出现答案。如果再次点击问题,答案会再次隐藏。

使用以下指令一切正常:

.directive('toggleOpen', function toggleOpen() {
    return {
        restrict: 'A',
        link: function (scope, element, attrs) {
            element.bind('click', function () {
                if(element.parent().children().hasClass('open')) {
                    element.parent().children().removeClass('open');
                } else {
                    element.parent().children().addClass('open');
                }
            });
        }
    }
});

所以有一堆 parent().children() 废话的原因是我无法工作的部分。

假设您有 2 个问题,1 和 2。当页面加载时,两个答案都被隐藏。用户点击问题 1,回答 1 取消隐藏。目前,当您单击问题 2 时,答案 2 会取消隐藏,这也是正确的 - 但我只希望一次打开一个答案。因此,如果显示答案 1 并且用户单击问题 2,我希望隐藏答案 1,并显示答案 2。

我有一个 CSS 类 'open' 我正在申请取消隐藏答案。所以基本上 - 我怎样才能找到所有具有“打开”类的元素并将其删除,然后将其应用于用户单击的元素?

有没有“纯粹”的角度方式来做到这一点?

TIA

【问题讨论】:

  • 我理解您关于“纯”角度解决方案的概念,但为什么不将 jQuery 与 Angular 结合使用呢?那么可以使用jQuery的选择器技术吗?如果您选择不使用 jQuery 选择器,那么您始终可以使用标准 DOM 函数实现自己的选择器搜索,并自行遍历 DOM 树以查找具有匹配类的元素。
  • @Kolban 因为 Angular 几乎说“不要那样做?”。尝试将两者结合起来被认为是非常糟糕的做法,这就是为什么 Angular 带有它自己的缩小版 jqLit​​e。完全不同(有时是相互竞争)的心态。
  • 这是一个很好的讨论。在 Angular 的主页 (angularjs.org) 上,我读到“它是完全可扩展的,并且可以与其他库很好地配合使用”。另请参阅官方常见问题解答 ... (docs.angularjs.org/misc/faq),它说可以将 Angular 与完整的 jQuery 一起使用。

标签: javascript css angularjs angularjs-directive


【解决方案1】:

你可以用模板逻辑来做这一切,不需要指令:

<section ng-class="{open: selected=='q1'}">
  <question ng-click="selected='q1'" ></question>
  <answer></answer>
</section>
<section ng-class="{open: selected=='q2'}">
  <question ng-click="selected='q2'" ></question>
  <answer></answer>
</section>
<section ng-class="{open: selected=='q3'}">
  <question ng-click="selected='q3'" ></question>
  <answer></answer>
</section>

【讨论】:

  • 这就像一个魅力。这就是我想太多的结果。 ;)
猜你喜欢
  • 2016-07-02
  • 2017-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-28
  • 1970-01-01
  • 2015-08-05
  • 2017-03-30
相关资源
最近更新 更多