первое, что вам нужно, это добавить новое необязательное свойство к вашему TreeNode
interface TreeNode {
label: string;
check?:boolean; //<--this one
children: TreeNode[];
}
После того, как вы можете использовать [ngModel] на входе и (ngModelChange) для вызова функции "selectNode"
<label class="node__label">
<input type="checkbox" [ngModel]="node.check"
(ngModelChange)="selectNode(node,$event)"/>
{{ node.label }}
</label>
seletNode - это функция, которая вызывает рекурсивную функцию:
public selectNode( node: TreeNode,value:boolean ) : void {
this.check(node,value)
}
check(node:any,value:boolean)
{
node.check=value;
node.children.forEach(x=>
{
this.check(x,value)
})
}
Вы можете видеть в этом stackblitz
Но вы можете принять во внимание предложить @Dseroski и не изобретать велосипед:)