How to use dynamic variables in ngModel?
I am trying to use the code below but the following error appears:
Define array in component and keep pushing in it.
export class AppComponent {
qtd:any[] = {};
}
Then, update your template like
<div *ngFor="let num of ['1','2','3']; let i=index">
<input id="qtd{{num}}" [(ngModel)]="qtd[num]" type="text"/>
</div>
{{ qtd | json}}
In this all your dynamic models will be in qtd array
Plunker
Hope that helps!
You can also do it this way if you want, in case you want an id matching the index.
<div *ngFor="let num of ['1','2','3']; let i=index">
<input
[attr.id]="'qtd'+i"
type="text"/>
</div>
Something like this works fine in my case:
export class AppComponent {
qtd:any[] = {};
}
In html i used index instead of value (num):
<div *ngFor="let num of ['1','2','3']; let i=index">
<input id="qtd[i]" [(ngModel)]="qtd[i]" type="text"/>
</div>
We would mostly need dynamic ngModel in the case of dynamic text box creation.
In your ts file
export class AppComponent {
public selectedBranch: any[] = [0];
public selectedShiftNameTime: any[] = [0];
public CustomDates: any[] = [0];
}
your HTML file (Template)
<table class="table" style="padding: 20px;">
<tr>
<td class="col-md-2">Employee Name</td>
<td class="col-md-2">Branch</td>
<td class="col-md-2">Shift Type</td>
<td class="col-md-2">Custom Dates</td>
</tr>
<tr *ngFor="let emp of Empdata">
<td>
<label>
{{emp.name}}
</label>
</td>
<td>
<select class="form-control rounded-0" id="selectedBranch{{emp.EmployeeInfoId}}" >
<option value='0'>--Select--</option>
<option *ngFor="let branch of Branchdata" [value]=branch.BranchId>
{{branch.BranchName}}
</option>
</select>
</td>
<td>
<select class="form-control rounded-0" id="selectedShiftNameTime{{emp.EmployeeInfoId}}" >
<option value='0'>--Select--</option>
<option *ngFor="let shifType of ShiftTypedata" [value]=shifType.ShiftTypeId>
{{shifType.ShiftName}}
</option>
</select>
</td>
<td>
<ng-multiselect-dropdown [placeholder]="'Select Custom Dates'" [data]="dropdownList" id="CustomDates{{emp.EmployeeInfoId}}" [(ngModel)]="CustomDates[emp.EmployeeInfoId]"
[settings]="dropdownSettings" (onSelect)="onItemSelect($event)" (onSelectAll)="onSelectAll($event)">
</ng-multiselect-dropdown>
</td>
</tr>
<tr>
<td colspan="4" >
<button type="button" (click)='submit()' >Submit</button>
</td>
</tr>
</table>
Let's say you have the following component
export class AppComponent {
qtd1 = 'qtd1';
qtd2 = 'qtd2';
qtd3 = 'qtd3';
}
Then your template might look like:
<div *ngFor="let num of ['1','2','3']; let i=index">
<input id="qtd{{num}}" [(ngModel)]="this['qtd' + num]" type="text"/>
</div>
Plunker Example