Почему *ngIf срабатывает только у первой строки таблицы ngx-datatable?

Есть таблица ngx-datatable. Создаю колонку с кнопкой:

<ngx-datatable-column
    [width]="50"
    [resizeable]="false"
    [sortable]="false"
    [draggable]="false"
    [canAutoResize]="false"
>
    <ng-template let-row="row" let-rowIndex="rowIndex" ngx-datatable-cell-template>
        <div class="go-to-link">
            <a class="btn " href="{{row.link}}" target="_blank" title="Перейти к источнику"><i class="fas fa-external-link-alt fa"></i></a>
            <button *ngIf="isAddedToProfile(row)==false" class="btn btn-add" (click)="addToProfile(rowIndex)"><i class="far fa-plus-square"></i></button>
            <button *ngIf="isAddedToProfile(row)==true" class="btn btn-delete" (click)="deleteFromProfile(rowIndex)"><i class="fas fa-minus-square"></i></button>
        </div>
    </ng-template>

Хочу чтобы если запись в таблице была сохранена ранее пользователем, то была кнопка "удалить", иначе "Добавить" Передаю "row" в метод для проверки есть ли этот объект в списке добавленных:

isAddedToProfile(row) { 
    let addedAuto = JSON.parse(sessionStorage.getItem('addedAuto'))

    for (let i = 0; i < addedAuto.length; i++) {
      if (row['_id'] == addedAuto[i]['_id']){
        return true
      }
      else {
        return false
      }      
    }                   
}

Пробегаюсь по массиву и ищу совпадения. Я знаю например что 2 элемента ранее добавлены, но в таблице кнопка меняется только у одного.


Ответы (1 шт):

Автор решения: Yugofx

Ошибка функции в том, что ваш цикл бежит ровно одну итерацию, и если совпадение не найдено вся функция сразу возвращает false. А вам просто надо пойти дальше сравнивать с другими элементами.

isAddedToProfile(row) { 
    // этот массив лучше сразу получить на onInit компонента, записать в поле
    // на onDestroy обновить localStorage
    let addedAuto = JSON.parse(sessionStorage.getItem('addedAuto'))

    for (let i = 0; i < addedAuto.length; i++) {
      if (row['_id'] == addedAuto[i]['_id']){
        return true
      }
    }
    return false;   
}

Или можно короче:

addedPersons = [...];

isAddedToProfile(row) {
    return this.addedPersons.some(person => person.id === row.id);
}
→ Ссылка