I was creating this project (Source Project) https://stackblitz.com/edit/angular-ivy-wkshmk; I had error but I 'solve' (with problems) here https://stackoverflow.com/a/70794789/811293
The problems are: Validations aren't working at Select level 2 or more.
I was checking this answer https://stackoverflow.com/a/56191376/811293 for this question.
Then I was trying to change my solution to based on ng-template, ng-container and ngTemplateOutlet
The transition is in this project: https://stackblitz.com/edit/angular-ivy-gns1kn
In the json-form.component.html file (source project) I changed
<selects
*ngIf="control.type === 'select'"
[control]="control"
[visible]="true"
(addControl)="onAddControl($event)"
[formBuilder]="myFormBuilder"
></selects>
To (destiny project) in the same json-form.component.html file
<ng-container
*ngIf="control.type === 'select'"
[ngTemplateOutlet]="selects"
[ngTemplateOutletContext]="{
incomingControl: control,
incomingVisible: true
}"
>
I removed the SelectsComponent (selects.component.ts and selects.component.html) and I changed to ng-template
<ng-template
#selects
let-control="incomingControl"
let-visible="incomingVisible"
>
...
</ng-template>
The recursion in the selects.component.html file (source project) for selects was
<selects
*ngIf="child.type === 'select'"
[control]="child"
[parentControl]="control"
[formBuilder]="formBuilder"
></selects>
was moved to (destiny project) in the same json-form.component.html file
<ng-container
*ngIf="child.type === 'select'"
[ngTemplateOutlet]="selects"
[ngTemplateOutletContext]="{
incomingControl: child,
parentControl: control
}"
>
</ng-container>
NOTE:
Due to the source project has a longer json with a deeper nested(recursion) , I changed to a shorter json in the destiny project.
This change can be done in the home.page.ts file, changing the needed line from .get('/assets/company.json') to .get('/assets/nested-select.json').
I would like to show the nested selects when the click is performed as the source project
THE PROBLEM:
As you can see in the above image; (at left side in the json file) the first component with the name company has children!
In the display view yo can see: "control.children: ...."
That is shown due to lines 100 and 101 in the json-form.component.html file.
control.children:<br />
{{ control.children | json }}<br />
But, When the click event is performed, the chilren are missing in the component side!!! As you can check in the image.
In the component at from line 83 through line 85
json-form.component.ts the file
console.log(
this.control?.children.length > 0 ? 'with children' : 'without children'
);
QUESTIONS:
What is the reason to lost the binding between the Component and Template?
How solve the problem with initial control (company)?



