【发布时间】: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 带有它自己的缩小版 jqLite。完全不同(有时是相互竞争)的心态。
-
这是一个很好的讨论。在 Angular 的主页 (angularjs.org) 上,我读到“它是完全可扩展的,并且可以与其他库很好地配合使用”。另请参阅官方常见问题解答 ... (docs.angularjs.org/misc/faq),它说可以将 Angular 与完整的 jQuery 一起使用。
标签: javascript css angularjs angularjs-directive