0
import { Pipe, PipeTransform } from '@angular/core';
import { courses } from '../interface/courses';

@Pipe({
  name: 'sort'
})
export class SortPipe implements PipeTransform {
  transform(value: Array<courses>, args: any[]): Array<courses> {
    const sortField = args[0];
      const sortDirection = args[1];
      let multiplier = 1;

       if (sortDirection === 'desc') {
         multiplier = -1;
        }
        
      value.sort((a: any, b: any) => {
  
       if (a[sortField] < b[sortField]) {
            return -1 *multiplier ;
       } else if (a[sortField]> b[sortField]) {
         return 1 *multiplier;
       } else {
         return 0;
        }       
    });

    return value;
  }  
}

これは、私のアプリケーションで使用しているソート パイプです。以下のインターフェイス リストからパラメータとしてsortFiledカテゴリを渡す必要があります。

export interface courses {
  courseId?: number;
  trainingPlatform: string;
  courseName: string;
  platformName: string;
  courseUrl: string;
  learningHours: number;
  courseAssignment: {
    assignmentId: number;
    userId: string;
    startDate: Date;
    endDate: Date;
    category: string;
    trainingType: string;
    courseId: number;
    courseStatus: string;
    completedDateTime: Date;
  };
}

このcourseAssignment.categorycourse.courseAssignment.categoryの両方を渡そうとしましたが、どちらも機能していません。

<div class="container d-flex flex-column">
  <h1 class="pt-2 text-primary">My Courses</h1>
  <div class="d-flex flex-row justify-content-between">
    <form class="mt-3 pl-1 search_bar">
      <input
        class="form-control mr-sm-2"
        type="text"
        placeholder=" Search"
        aria-label="Search"
      />
    </form>
    <div>
      <button mat-raised-button class="m-2">Add Courses</button>
      <button mat-button mat-raised-button [matMenuTriggerFor]="menu">
        SortBy <i class="fas fa-sort-amount-down"></i>
      </button>
      <mat-menu #menu="matMenu">
        <button mat-menu-item  (click)="onSortbyParam()">
        Mandatory
        </button>
        <button mat-menu-item (click)="onSortbyParam1()">
        Non-mandatory
        </button>
      </mat-menu>
    </div>
  </div>
  <div class="card m-2 " >
 <div *ngFor="let course of courseList|sort:[SortbyParam,SortDirection] index as i">
    <div class="card m-2">
      <div class="card-body d-flex flex-row row">
        <div
          class="
            col-4
            d-flex
            flex-row
            justify-content-center
            align-items-center
            col-12 col-sm-4
          "
        >
          <img
            src="https://www.plm.automation.siemens.com/media/global/en/Artificial-Intelligence-AI-Automotive-AT_tcm27-91268.jpg"
            alt="image"
            class="image"
          />
        </div>

        <div class="col-6 col-sm-4">
          <h2 class="card-title">{{ course.courseName }}</h2>
          <h3 class="text-muted">
            Start Date: {{ " " + course.courseAssignment.startDate }}
          </h3>
          <h4>
            <strong>Days left</strong> :{{
              calculateDiff(course.courseAssignment.endDate)
            }}
          </h4>
          <br />
          <mat-checkbox
            (click)="setStatusOfUser(course.courseId)"
            [checked]="course.courseAssignment.courseStatus == 'Completed'"
            [disableRipple]="true"
            >Mark as Completed</mat-checkbox
          >
          <br />
          <p class="card-text">{{ course.trainingPlatform }} Platform</p>
          <br />
        </div>
        <div
          class="
            d-flex
            flex-column
            justify-content-center
            align-items-center
            col-6 col-sm-4
          "
        >
          <p class="text-uppercase" style="color: #ff0000">
            {{ " " + course.courseAssignment.category }}
          </p>
          <h3 class="text-muted mt-3">
            End Date: {{ " " + course.courseAssignment.endDate }}
          </h3>
          <div
            *ngIf="course.courseAssignment.courseStatus === 'Completed'"
            class="text-muted"
          >
            completed Date:
            {{ course.courseAssignment.completedDateTime | date }}
          </div>

          <div
            *ngIf="course.courseAssignment.courseStatus === 'Completed'"
            class="mt-2"
          >
            <a href="https://talent.capgemini.com/">View Certificate</a>
          </div>
        </div>
      </div>
    </div>
  </div>
</div>

ボタンをクリックすると、TSファイルでこのような引数を設定しますが、機能しません。

onSortbyParam() {
    this.SortbyParam = 'courses.courseAssignment.category';
    this.SortDirection = 'asc';
    console.log(this.SortbyParam);
  }

  onSortbyParam1() {
    this.SortbyParam = 'courses.courseAssignment.category';
    this.SortDirection = 'desc';
    console.log(this.SortbyParam);
  }
4

1 に答える 1