Изменение значений массива в таблице Angular

#angular #typescript #ngmodel

#angular #typescript #ngmodel

Вопрос:

У меня есть объект, в котором перечислены таблицы и столбцы базы данных, с флажком и выпадающим списком для его изменения, я хочу сохранить этот объект, но с проверкой и измененным выпадающим списком при нажатии на кнопку.

введите описание изображения здесь

HTML:

 <div class="card" *ngFor="let table of schema.tables | keyvalue">
        <div class="card-header border-top headerCollapse p-0" [attr.id]="'heading'   table.key">
            <h5 class="mb-0">
                <button class="collapsed AccodeonTitle activeAccodeonTitle" data-toggle="collapse" [attr.data-target]="'#collapse'   table.key" aria-expanded="false" [attr.aria-controls]="'#collapse'   table.key">
                    <span>{{table.value.name}}</span>
                </button>
            </h5>
            <svg data-toggle="collapse" [attr.data-target]="'#collapse'   table.key" width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-chevron-up collapseIcon collapseIconActive" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
                <path fill-rule="evenodd" d="M7.646 4.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1-.708.708L8 5.707l-5.646 5.647a.5.5 0 0 1-.708-.708l6-6z"/>
              </svg>
        </div>
        <div [attr.id]="'collapse'   table.key" class="collapse show" aria-labelledby="headingOne" data-parent="#accordion">
            <div class="card-body p-0">
                <table class="ConfigurationTable selectTable pl-5">

                    <thead class="theadSelectTable">
                        <tr>
                            <th>
                                <div class="d-flex align-items-center">
                                    <span class="colLogo"></span>
                                    <span class="d-inline-block pl-3">Columnas</span>
                                </div>
                            </th>
                            <th></th>
                        </tr>
                    </thead>
                    <tbody class="">
                        <tr *ngFor="let column of table.value.columns | keyvalue">
                            <td>
                                <input (click)="alert($event)" type="checkbox" aria-label="Checkbox for following text input">
                                <span class="pl-3">{{column.value.name}}</span>
                            </td>
                            <td class="selectProperties">
                                <select class="custom-select customPlaceHolder tablePlaceHolder custom-select-table">
                            <option selected>Base de datos_06</option>
                            <option value="1">PER</option>
                            <option value="2">NUM</option>
                            <option value="3">DATA</option>
                          </select>
                            </td>
                        </tr>
                    </tbody>
                </table>
            </div>
        </div>
    </div>
 

Объект:

     export interface SchemeDB {
    name:String;
    tables:Map<String,Table>;
}
export interface Table {
  name:String;
  columns:Map<String,Column>;
}

export interface Column {
    checked:boolean;
    typeEnt:String
    name:String;
    type:String;
    size:number;
    primaryKey:boolean;
}
 

Мне нужно изменить переменную checked и typeentинтерфейса столбца

Ответ №1:

Вы можете создать массив и вставить столбец в массив, проверив его

 checkedColumns = {};

onChecked(event,column,tableName){
 if(!this.checkedColumns[tableName])
   this.checkedColumns[tableName] = []; //initialize as blank array

 if(event.checked){ //if checking it then add to the array
  this.checkedColumns[tableName].push(column)
 } else { // if unchecking remove from array
  let index = this.checkedColumns[tableName].indexOf(column)
  if(index !== -1)
    this.checkedColumns[tableName].splice(index,1)
 }
}
 

В html вы можете указать

 <input (click)="onChecked($event,column,table.name)" type="checkbox" aria-label="Checkbox for following text input">
 

Таким образом, при сохранении у вас есть все столбцы, которые отмечены.

Комментарии:

1. Это сработало бы, но вам также нужно будет сохранить, к каким таблицам они принадлежат

2. В этом случае просто передайте таблицу вместе с функцией. Я обновил свой ответ, чтобы сделать это.