【发布时间】:2014-08-05 04:02:42
【问题描述】:
我有这个 jQuery 函数,我正在尝试将其转换为 AngularJS。该函数将嵌套列表转换为树视图结构。我已经查看了几个完全在控制器或指令中创建树的示例。我已经有一个要转换为树结构的 HTML 结构。我希望树能够随着更多 HTML 元素的添加而扩展。此外,该函数可以没有 jQuery 依赖项。这可以在每个列表元素中没有类或指令的情况下完成吗?这是jQuery函数:
$(function() {
$('.tree li ul li').hide();
$('.tree ul li:first').show();
$('.tree li').on('click', function(e) {
if ($(this).find('> ul > li').is(':visible')) {
$(this).find('> ul > li').hide('fast');
} else {
$(this).find('> ul > li').show('fast');
}
e.stopPropagation();
});
});
$('li').on('click', function() {
$(this).toggleClass('minus');
});
这里是 HTML:
<ul class="tree">
<li >List 1
<ul >
<li>element 1</li>
<li>element 2</li>
<li>element 3</li>
<li>sub-list 1
<ul >
<li>sub-element 1</li>
<li>sub-element 2</li>
<li>sub-element 3</li>
<li>sub-element 4</li>
<li>sub-element 5</li>
</ul>
</li>
<li>element 4</li>
<li>element 5</li>
</ul>
</li>
<li >List 2
<ul >
<li>element 1</li>
<li>element 2</li>
<li>element 3</li>
<li>element 4</li>
<li>element 5</li>
</ul>
</li>
这是我到目前为止所拥有的,我承认并不多:
tree.directive('treeView',function(){
return{
restrict: 'AE',
replace: 'true',
link:function(scope,elem,attrs){
elem.bind('click',function(){
elem.children().hide();
});
}
}
});
我知道 Angular 的方式不是针对 DOM 元素,这就是为什么我在理解如何前进时遇到问题。提前感谢您的帮助。
【问题讨论】:
-
制作一个小提琴 - 对于那些试图帮助你的人来说更容易
-
""我希望树能够随着更多 HTML 元素的添加而扩展"" -> 如果这听起来像这样,则表明您需要一个模型,是的,您可以以“OLD HACK THE DOM”的方式来做......但你最终会得到一些可怕的东西!......看看:github.com/dotJEM/angular-tree 它可以让你完全控制 Tree 映射到 html 的方式。 -> plnkr.co/edit/YhQ20OEWI8Ff6baYyQgX?p=preview
-
感谢您的链接。它为我指明了正确的方向。我知道在 Angular 中破解 DOM 不是正确的方法,但我不知道如何开始。