Подумайте о внесении этих обновлений в свой шаблон:
<p-dataView [value]="iErsaDefaultApps" [paginator]="true" [rows]="20">
<ng-template let-apps let-rowIndexValue="rowIndex" pTemplate="listItem">
<div>
<input type="checkbox" (click)="toggleSelectedApp($event, rowIndexValue)" id="defaultAppID" name="defaultApps"
style="margin-right:5px;margin-bottom:10px;margin-left:5px; margin-top:10px"
[value]='apps.app_id'> {{apps.app_name}}
</div>
<div>
<select name="role" class="dropdown" style="width:60%"
(change)="selectedDefaultAppRole($event, rowIndexValue)" [(ngModel)]="apps.app_role">
<option class="dropdown-item" value="" selected>Select</option>
<option class="dropdown-item" *ngFor='let role of apps.roles' [value]="role.app_role_id">
{{role.app_role_name}}
</option>
</select>
</div>
</ng-template>
</p-dataView>
Это похоже на то, что у вас есть сейчас, с добавлением передачи значения rowIndexValue
в функции toggleSelectedApp
и selectedDefaultAppRole
,rowIndexValue
доступен в шаблоне, потому что вы использовали let-rowIndexValue="rowIndex"
.Это означает, что индекс из данных, поступающих с iErsaDefaultApps
, будет доступен для использования.
ОБНОВЛЕНИЕ: Я изменил то, к чему вы привязывались, с помощью ngModel
, чтобы установить выбранное значение наapps.app_role
напрямую.Измените [value]="role.app_role_id"
на [value]="role.app_role_name"
, если вы предпочитаете сохранить имя роли.
Затем вы можете получить доступ к информации в коде TS следующим образом:
export class MyComponent {
iErsaDefaultApps = [{
app_id: 1,
app_name: 'App One',
app_role: '',
roles: [{
app_role_id: 0,
app_role_name: 'App Role One'
},
{
app_role_id: 1,
app_role_name: 'App Role Two'
}]
},
{
app_id: 3,
app_name: 'App Two',
app_role: '',
roles: [{
app_role_id: 0,
app_role_name: 'App Role One'
},
{
app_role_id: 1,
app_role_name: 'App Role Two'
}]
}];
selectedApps: Set<IErsaApps> = new Set<IErsaApps>();
toggleSelectedApp(event: any, rowIndexValue: number) {
// This adds or remove items from the selectedApps set
const cApp = this.iErsaDefaultApps[rowIndexValue];
console.log('Selected App', cApp);
if (event.srcElement.checked) {
this.selectedApps.add(cApp);
} else {
this.selectedApps.delete(cApp);
}
console.log('Selected Apps', this.selectedApps);
}
selectedDefaultAppRole(event: any, index: any) {
// Now you can find out of the current app is selected
const cApp = this.iErsaDefaultApps[index];
console.log('Selected App', cApp);
const isAppSelected = this.selectedApps.has(cApp);
console.log('Is App Selected', isAppSelected);
console.log('Selected Apps', this.selectedApps);
}
}
export interface IErsaApps {
app_id: number;
app_name: string;
app_role: string;
roles: Array<IErsaAppRoles>;
}
export interface IErsaAppRoles {
app_role_id: number;
app_role_name: string;
}
Это добавляет простоепоиск на основе индекса, переданного из шаблона.Затем он пытается определить, установлено ли selectedApps
has
приложением в нем.
Делайте все, что вам нужно, когда вызывается функция.