Как передать данные от компонента к модальному ngBootstrap в Angular 7? - PullRequest
1 голос
/ 21 марта 2019

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

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

Вот созданная скрипка https://stackblitz.com/edit/angular-xr8ud5

Я использовал угловой 1.x, и данные были переданы через разрешение. Я новичок в Angular и никогда не работал в ngBootstrap.

Любая помощь приветствуется. Спасибо

Ответы [ 3 ]

2 голосов
/ 21 марта 2019

просто нужно сохранить выбранную строку в переменной, которую мы затем можем отобразить в HTML

в вашем стекаблике , измените modal-basic.html на:

<code><table class="table">
  <thead>
    <tr>
      <th scope="col">#</th>
      <th scope="col">First</th>
      <th scope="col">Last</th>
      <th scope="col">Handle</th>
    </tr>
  </thead>
  <tbody>
    <tr *ngFor="let tableRow of table" (click)="open(content, tableRow)">
      <th scope="row">{{tableRow.id}}</th>
      <td>{{tableRow.first}}</td>
      <td>{{tableRow.last}}</td>
      <td>{{tableRow.handle}}</td>
    </tr>
  </tbody>
</table>


<ng-template #content let-modal>
  <div class="modal-header">
    <h4 class="modal-title" id="modal-basic-title">Details</h4>
    <button type="button" class="close" aria-label="Close" (click)="modal.dismiss('Cross click')">
      <span aria-hidden="true">&times;</span>
    </button>
  </div>
  <div class="modal-body">
    id:<u>{{selectedRow.id}}</u><br>
    first:<u>{{selectedRow.first}}</u><br>
    last:<u>{{selectedRow.last}}</u><br>
    handle:<u>{{selectedRow.handle}}</u>
  </div>
</ng-template>
<hr>

<pre>{{closeResult}}

в вашем стекаблице , измените modal-basic.ts на:

import {Component} from '@angular/core';

import {NgbModal} from '@ng-bootstrap/ng-bootstrap';

@Component({
  selector: 'ngbd-modal-basic',
  templateUrl: './modal-basic.html'
})
export class NgbdModalBasic {
  closeResult: string;
  table = [
  {
    "id": 1,
    "first":"Mark",
    "last": "Otto",
    "handle": "@mdo"
  },{
    "id": 2,
    "first":"Jacob",
    "last": "Thornton",
    "handle": "@fat"
  },{
    "id": 3,
    "first":"Larry",
    "last": "the Bird",
    "handle": "@twitter"
  }
];

selectedRow;

  constructor(private modalService: NgbModal) {}

  open(content, tableRow) {
    this.modalService.open(content, {ariaLabelledBy: 'modal-basic-title'});
    //console.log(tableRow)
    this.selectedRow = {id:tableRow.id, first: tableRow.first, last:tableRow.last, handle:tableRow.handle};
  }
}
2 голосов
/ 21 марта 2019

Передача данных из вашего компонента в модальный режим ngBoostrap может быть выполнена с помощью двухстороннего связывания Angular . Это на самом деле так же, как вы выполняете двухстороннее связывание на Angular 1.x!

Я сделал для вас демо .

Сначала на вашем model-basic.ts вы определяете свою модель для модального. Затем вы присваиваете свойство модели modalContent с данными строки таблицы.

modalContent:undefined
  .
  .

open(content, tableRow) {
  this.modalContent = tableRow
  this.modalService.open(content, {ariaLabelledBy: 'modal-basic-title'});
}

В вашем modal-basic.html вы можете использовать {{...}} шаблонное выражение для отображения отдельных свойств вашей модели на самом модале.

<ng-template #content let-modal>
  <div class="modal-header">
    <h4 class="modal-title" id="modal-basic-title">Details</h4>
    <button type="button" class="close" aria-label="Close" (click)="modal.dismiss('Cross click')">
      <span aria-hidden="true">&times;</span>
    </button>
  </div>
  <div class="modal-body">
    id: {{ modalContent.id }}
    <br>
    first: {{ modalContent.first }}
    <br>
    last: {{ modalContent.last }}
    <br>
    handle: {{ modalContent.handle }}
  </div>
</ng-template>
0 голосов
/ 21 марта 2019

Вы можете создать переменную для модальных данных в компоненте: StackBlitz

Или вы можете создать компонент для модальных данных:
modal-basic.ts

openModal(dataToModal) {
        const modalRef = this.modalService.open(ModalComponent);
        modalRef.componentInstance.inputDataInModalComponent = dataToModal;
        modalRef.result.then(() => {});
        }, () => {});
    }

modal.component.ts

export ModalComponent implements OnInit{
    @Input() inputDataInModalComponent: any;

    ngOnInit() {
         console.log(inputDataInModalComponent);
    }
}
...