Добавить ссылку внутри каждой строки — ngx-datatable

#javascript #html #angular #click #ngx-datatable

#javascript #HTML #угловой #нажмите #ngx-datatable

Вопрос:

Я очень новичок в angular. Я пытаюсь добавить ссылку в каждую строку ngx-datatable при нажатии на первый столбец каждой строки. Это должно привести меня на другую страницу на основе идентификатора строки, например, если у меня есть таблица курсов, первый столбец — это название курса. Когда я нажимаю на название курса для каждой строки, я хочу сохранить идентификатор всей строки и вызвать функцию с этим идентификатором, которая должна привести меня к соответствующей странице для каждого курса. Название курса должно быть видимой ссылкой (кликабельной) с курсором: указатель на нее. Я был бы признателен за любую идею, которая поможет мне выполнить эту работу.

Это то, что я пробовал до сих пор (ссылка не работает):

  viewCourseTrainings(id: number){
    this.router.navigate(['/home-page/mentor-trainings/'  id])
  }
  
  <ngx-datatable
      class="material"
      [rows]="rows"
      [columns]="columns"      
      [columnMode]="'force'"
      [headerHeight]="50"
      [footerHeight]="50"
      [rowHeight]="'auto'"
      [limit]="5">

<ngx-datatable-column name="Name" prop="name">
      <ng-template let-row="row" let-value="value">
            <a (click)="viewCourseTrainings(value.id)">{{value.name}}</a>
      </ng-template>
</ngx-datatable-column>

</ngx-datatable>
  

Ответ №1:

Пока ваш код выглядит хорошо, я бы рекомендовал вам передать все значение и получить доступ к идентификатору в TS

  <ngx-datatable-column prop="$key">
                <ng-template let-row="row" let-value="value" ngx-datatable-cell-template>
                  <a  class="nav-link edit" (click)="viewCourseTrainings(value)">
                    <i class="fa fa-pencil-square-o" aria-hidden="true"></i>
                  </a>
                </ng-template>
  </ngx-datatable-column> 
  

Соответствующий TS

  viewCourseTrainings(valObj: any){
    this.router.navigate(['/home-page/mentor-trainings/'  valObj.id])
  }
  

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

1. о, ты можешь добавить {{значение}} и посмотреть в шаблоне

Ответ №2:

Спасибо за вашу помощь, мне удалось решить эту проблему.

 <ngx-datatable-column name="Name" prop="name">
        <ng-template ngx-datatable-cell-template let-row="row" let-value="value">
          <a class="nav-link" (click)="viewCourseTrainings(row)">
            {{row.name}} <!-- or {{value}} -->
          </a>
        </ng-template>
</ngx-datatable-column>
  

И TS в точности соответствует вашим словам.

Ответ №3:

На самом деле есть более простой способ сделать это. Вы можете использовать routerLink и передать идентификатор строки с помощью двойных фигурных скобок. Таким образом, нет необходимости определять что-либо в файле ts. Смотрите мой пример:

 <ngx-datatable-column name="Actions" [width]="80">
   <ng-template let-row="row" ngx-datatable-cell-template>
      <a routerLink="/mentor-trainings/{{row.id}}">View training</a>
   </ng-template>
</ngx-datatable-column>