【问题标题】:convert jQuery tree view to AngularJS将 jQuery 树视图转换为 AngularJS
【发布时间】: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 不是正确的方法,但我不知道如何开始。

标签: angularjs tree treeview


【解决方案1】:

感觉很脏 :-) 这里没有数据,只有 DOM 元素,不知道这个有多大用处。

这将为您提供展开折叠行为

css:

div.treeview li.collapsed ul {
    display: none;
}

js:

angular.module('treetestApp')
    .directive('treeView', function () {
        return {
            template: '<div class="treeview" ng-transclude></div>',
            restrict: 'E',
            replace: true,
            transclude: true,
            link: function postLink(scope, element, attrs) {
                element.bind('click', function (e) {
                    if (e.target.tagName === "LI" && e.target.childElementCount) {
                        $(e.target).toggleClass('collapsed');
                    }
                })
            }
        };
    });

【讨论】:

  • 我同意你的观点,因为没有数据需要处理,它可能不适合 Angular。我只是想弄清楚 Angular 是如何通过手来工作的。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多