如何折叠每个角度 UI 树的所有功能

Posted

技术标签:

【中文标题】如何折叠每个角度 UI 树的所有功能【英文标题】:how to collapse all function on for each angular UI tree 【发布时间】:2017-09-09 02:39:47 【问题描述】:

对于 Angular ui-tree,我想添加全部展开或全部折叠。

我尝试了以下代码,它可以工作。

 $scope.collapseAll = function () 
        $scope.$broadcast('angular-ui-tree:collapse-all');
      ;

  $scope.expandAll = function () 
    $scope.$broadcast('angular-ui-tree:expand-all');
  ;
  ...

问题是,我的页面有多个 ui 树,我只想单独触发 expandAll 函数。现在我触发了这个 expandAll 函数。 所有 ui -tree 都会受到影响。

有没有办法把每一个都设置成单独的?

How to call collapseAll function on Angular UI tree?

【问题讨论】:

【参考方案1】:

如果您检查 Angular ui 树的 Source,'angular-ui-tree:collapse-all' 事件会切换范围值。其他问题是 angular-ui-tree 中的每个指令都继承了父级的范围,而不是具有孤立的范围。因此,在广播事件时更改它实际上是在更改相同的范围值。

您应该找到一种方法让每棵树都有一个单独的范围,或者考虑使用其他一些树,例如 v-accordion 。

【讨论】:

感谢您的回复。 v-accordion 是一个很棒的插件,以后会考虑使用它。无论如何,我使用while循环并递归获取childNode,可以解决它。谢谢【参考方案2】:

我们应该为指定的树范围广播 angular-ui-tree:collapse-all。 它对我有用。您可以毫不犹豫地使用它。

    function collapseAll() 
        var treeScope = _getRootNodesScope('myTreeId');
        if (treeScope) 
            treeScope.$broadcast('angular-ui-tree:collapse-all');
        
    


 function expandAll() 
        var treeScope = _getRootNodesScope('userTreeroot');
        if (treeScope) 
            treeScope.$broadcast('angular-ui-tree:expand-all');
        
    

  function _getRootNodesScope(myTreeId) 
 var treeElement = angular.element(document.getElementById(myTreeId));
 if (treeElement) 
 var treeScope = (typeof treeElement.scope === 'function') ? 
 treeElement.scope() : undefined;
            return treeScope;
        
        return undefined;
    ;

【讨论】:

以上是关于如何折叠每个角度 UI 树的所有功能的主要内容,如果未能解决你的问题,请参考以下文章

Xcode (Swift) 中的 UI:我只想要 UIStackView 的折叠功能,而不是标准化间距。还值得用吗?

如何使用 vim 自动折叠文件中的所有函数?

需要折叠树的帮助

React Material UI 多重折叠

折叠所有功能的快捷方式⌘⌥⌥←在Xcode 10.1中不再有效?

如何使用角度链接功能禁用除特定元素之外的所有点击