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: Validation
s 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
)?