Как изменить содержимое ячейки MaterialTable при нажатии?

Большая фотография

Привет, Я пытаюсь использовать Angular Material в Angular 7. Я должен использовать таблицу материалов с некоторыми данными. Мой вопрос: есть ли способ изменить содержимое MatCell по щелчку? Например, рассмотрим приведенную выше HTML-таблицу с именами людей, возрастом и телефонами.

Таблица материалов Angular HTML

<mat-form-field>
    <input matInput (keyup) = "applyFilter($event.target.value)" placeholder = "Phone">
</mat-form-field>

<mat-table [dataSource] = "dataSource" class = "mat-elevation-z8" matSort >
      
    <ng-container matColumnDef = "name">
        <mat-header-cell *matHeaderCellDef mat-sort-header>Name</mat-header-cell>
        <mat-cell *matCellDef = "let person" >{{person.name}}</mat-cell>
    </ng-container>
      
    <ng-container matColumnDef = "age">
        <mat-header-cell *matHeaderCellDef mat-sort-header>Age</mat-header-cell>
        <mat-cell *matCellDef = "let person">{{person.age}}</mat-cell>
    </ng-container>
      
    <ng-container matColumnDef = "phone">
        <mat-header-cell *matHeaderCellDef mat-sort-header>Phone Number</mat-header-cell>
        <mat-cell *matCellDef = "let person">{{person.phone}}</mat-cell>
    </ng-container>

    <mat-header-row *matHeaderRowDef = "displayedColumns"></mat-header-row>
    <mat-row *matRowDef = "let row; columns: displayedColumns;"></mat-row>

</mat-table>
<mat-paginator [length] = "100" [pageSize] = "5" [pageSizeOptions] = "[5, 10, 25, 100]"></mat-paginator>

Что работает

Таблица для отображения данных, нумерация страниц, фильтрация и сортировка заголовков работают отлично!

Что мне нужно

Я хочу сделать это когда я нажимаю в ячейке телефона вместо текста, тег <input> занимает место {{person.phone}} с текущим номером, что позволит мне изменить номер телефона и сохранить новый. нравится:

Желаемый контент MatCell по клику

<ng-container matColumnDef = "phone">
    <mat-header-cell *matHeaderCellDef mat-sort-header>Phone Number</mat-header-cell>
    <mat-cell *matCellDef = "let person">
        <input matInput [value] = "person.phone"(focusout) = "changePhone($event.target.value, person)" placeholder = "Phone">
    </mat-cell>
</ng-container>

Кто-нибудь может мне помочь?

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
0
1 638
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать *ngIf с каким-либо флагом для выбранного номера телефона, чтобы переключаться между ними. Так, например, если у вас есть что-то подобное в вашем компоненте:

selectedPerson:Person;

... у вас может быть что-то вроде этого в вашем шаблоне:

...
<ng-container matColumnDef = "phone">
    <mat-header-cell *matHeaderCellDef mat-sort-header>Phone Number</mat-header-cell>
    <mat-cell *matCellDef = "let person">
        <span *ngIf = "selectedPerson !== person" (click) = "selectedPerson = person">
            {{person.phone}}
        </span>
        <input *ngIf = "selectedPerson === person" matInput [value] = "person.phone"(focusout) = "changePhone($event.target.value, person)" placeholder = "Phone">
    </mat-cell>
</ng-container>
...

Спасибо, это сработало! Я не знаю, почему у меня не было этой идеи раньше, хахах

Lucas Gaspar 26.01.2019 22:30

Рад слышать это! Удачи с вашим приложением.

Damon Kaswell 26.01.2019 22:45

Другие вопросы по теме