我有以下代码,其中“ currentNode”是已从层次结构级别中选择的节点。它是具有键值对的json。它具有诸如“儿童”,“已选择”之类的键。
我想执行递归操作,以便每当选择一个节点时(选中的函数具有被选中的“ currentNode”),请检查其是否具有子代。如果没有,只需传递currentNode。如果有子级,则执行递归以传递具有“ Selected = true”属性的节点。
在我当前的代码中,我只能使选定的子节点达到一个深度。
checkbox-tree.component.ts:
import { Component, EventEmitter, Output } from '@angular/core';
import { TreeNode } from './../../dto/TreeNode';
import { BaseTreeComponent } from './../base-tree/base-tree.component';
import { Subject } from 'rxjs/Subject';
import html from './checkbox-tree.component.html';
import css from '../fortune-select.component.css';
@Component({
selector: 'checkbox-tree',
template: html,
styles: [css],
})
export class CheckboxTreeComponent<T> extends BaseTreeComponent<T> {
//gets called when a node is selected
public selected():void {
if(this.currentNode.children.length !== 0) {
this.currentNode.children.forEach(child => {if(child.selected = true) {
this.sliceSelected.emit(child);
//should ideally check again if child has children and if the child nodes are selected
}})}
else {
this.sliceSelected.emit(this.currentNode);
}
if(!this.linked || (this.currentNode.indeterminate && !this.currentNode.selected)) {
this.dataChangedEvent();
return;
}
this.currentNode.indeterminate = false;
if(this.singleLevelOnly) {
this.currentNode.selectChildrenSingleLevel(this.currentNode.selected);
} else {
this.currentNode.selectChildren(this.currentNode.selected);
}
this.childChanged.emit();
this.dataChangedEvent();
}
}