Неправильная сортировка массива в угловых - PullRequest
1 голос
/ 12 марта 2019

Я использую * ngFor для итерации массива объектов в таблице данных и для серийного номера. Я использую let index of i и затем печатаю его в таблицу, но проблема, с которой я сталкиваюсь, заключается в том, что после 9-го серийного номера нет. я получил 10, но после 1 серийного нет. как 1, 10, 11, 2, 3. Может кто-нибудь помочь мне с этим? Вот мой машинописный код и HTML-код. Here is the screenshot

// GETTING BONUS DATA
 getAllJobposts() {
 this.apiService.hrService.getAllJobPost().subscribe((res: any) => {
  this.jobPostsData = res.data;
  console.log(this.jobPostsData);
  // this.DataTablesFunctionCallAfterDataInit()
 });
}

 <tr class="MousePointer" (click)="EditRecord(post.id, target)" *ngFor="let 
   post of jobPostsData | reverse; let i = index">

              <td>{{ i+1 }}</td>
              <td>
                <span style="display: inline">
                  <a class=" btn btn-link btn-sm " title="Delete" [id]="post.id" (click)="$event.stopPropagation();modal.ShowModal(post.id)">
                    <i [ngStyle]="{color: 'blue'}" class="fa fa-trash-o ">
                    </i>
                  </a>
                  <a class="btn btn-link btn-sm btn-round" title="Edit" (click)="$event.stopPropagation();EditRecord(post.id,target)">
                    <i [ngStyle]="{color: 'blue'}" class="fa fa-pencil-square-o "></i>
                  </a>
                </span>
              </td>
              <td>{{ post.jobTitle }}</td>
              <td>{{ getDepartmentName(post.departmentId) }}</td>
              <td>{{ getDesignationName(post.designationId) }}</td>
              <td>{{ post.totalPosition }}</td>
              <td>{{ post.minExperience }}</td>
              <td>{{ getCityName(post.cityId) }}</td>
              <td>
                <span [class]="post.active == 1? 'status success':'status danger'" style="width:60px !important; text-align: center;">
                  {{post.active == 1? "Active":"In-Active" }}
                </span>
              </td>
            </tr>

1 Ответ

1 голос
/ 14 марта 2019

Кажется, вам нужно переписать ваш reverse канал чем-то вроде этого:

import { Pipe, PipeTransform } from '@angular/core';
@Pipe({ name: 'reverse' })
export class ReversePipe implements PipeTransform {
  transform(value) {
    return value.sort((a, b) => {
      return (b.id - a.id);
    }); 
  }
}

В функции сортировки вам нужно указать объект для сортировки: return (b.id - a.id).

Или использоватьparseInt(b.id) - parseInt(a.id) если идентификаторы являются строками (в противном случае он выдаст тот же результат, что и на вашем скриншоте, то есть в алфавитном порядке)

Дополнительно вы можете передать поле объекта для сортировки через параметры конвейера

...