角树组件如何通过复选框选择捕获选定的节点

时间:2018-04-30 22:55:44

标签: typescript treeview angular5 angular-components

我使用angular-tree-component生成带有复选框选项的树。 HTML

<tree-root [nodes]="nodes" [options]="options">
      </tree-root>

打字稿:

import { ITreeOptions } from 'angular-tree-component';
import { Component } from '@angular/core';

export class myComponent {
nodes = [
    {
      name: 'root1',
      children: [
        { name: 'root1_child1' },
        {
          name: 'root1_child2', children: [
            { name: 'grand_child1' },
            { name: 'grand_child2' }
          ]
        }
      ]
    },
    {
      name: 'root2',
      children: [
        { name: 'root2_child1' },
        {
          name: 'root2_child2', children: [
            { name: 'grand_child1' },
            { name: 'grand_child2' }
          ]
        }
      ]
    }
  ];

  options: ITreeOptions = {
    useCheckbox: true
  };

  optionsDisabled: ITreeOptions = {
    useCheckbox: true,
    useTriState: false
  };

因此,我能够选择树节点(包括子节点),但无法找到可以捕获所有选定(已检查)节点并在另一个框上显示的任何方式。enter image description here

3 个答案:

答案 0 :(得分:3)

您可以使用“event.treeModel.selectedLeafNodeIds”在树中获取所选节点,

示例:

<tree-root [nodes]="treeNode" (select)="onSelect($event)"
    (deselect)="onDeselect($event)" [options]="options"></tree-root>

this.selectedTreeList = Object.entries(event.treeModel.selectedLeafNodeIds)
     .filter(([key, value]) => {
            return (value === true);
      }).map((node) => node[0]);

答案 1 :(得分:1)

参考上述答案以获取可以使用的对象

  Object.entries(this.treeModel.selectedLeafNodeIds)
  .filter(([key, value]) => {
    return (value === true);
  })
  .map((id) => {
    let node = this.treeModel.getNodeById(id[0]);
    return node;
  });

答案 2 :(得分:0)

您可以通过使用(选择)和(取消选择)事件来执行此操作。 这是一个小例子。

onSelect(event) {
    try {

      let pushdata: any = [];
      pushdata.push(event.node.data);

      console.log(this.TreeViewData);
    } catch (e) {
      console.log(e.message)
    }
  }

与取消选择相同,即使您可以捕获取消选择的节点

ondeSelect(event) {
        try {

          let pushdata: any = [];
          pushdata.push(event.node.data);

          console.log(this.TreeViewData);
        } catch (e) {
          console.log(e.message)
        }
      }

Event.node.data将返回所有绑定属性的数组列表。