Как добавить компонент строки в таблицу в Angular 7?

Я использую последнюю версию angular. (7.2.0) У меня есть личный компонент tr, например:

import { Component, OnInit, Input } from '@angular/core';

@Component({
selector: 'app-table-row',
templateUrl: './table-row.component.html',
styleUrls: ['./table-row.component.scss']
})
export class TableRowComponent implements OnInit {
@Input() character: any;
@Input() columns: string[];

constructor() { }

ngOnInit() {
}

}

Я хочу использовать этот компонент внутри таблицы, например:

<table class = "mat-elevation-z8">
<tr>
   <th *ngFor = "let c of columns">{{c}}</th>
</tr>
<tr app-table-row class = "component-style table-row-component" *ngFor = "let ch of characters | async" 
   [character] = "ch" 
  [columns] = "columns">
</tr>

</table>

получить ошибки типа:

Can't bind to 'character' since it isn't a known property of 'tr'. ("table-row class = "component-style table-row-component" *ngFor = "let ch of characters | async" 
       [ERROR ->][character] = "ch" 
      [columns] = "columns">
  </tr>
"): ng:///AppModule/TableComponent.html@7:7

Как правильно добавить мой компонент в таблицу?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
6
0
4 628
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Определите селектор компонентов как селектор атрибутов с квадратными скобками:

@Component({
  selector: 'tr[app-table-row]',
  ...
})

чтобы его можно было установить как атрибут элемента tr:

<tr app-table-row ...>

Спасибо. Работает, но согласно angular.io/guide/styleguide#style-05-03. это неправильный стиль для eslint

user504909 01.04.2019 03:50

Как сказано в руководстве по стилю: «Есть несколько случаев, когда компоненту присваивается атрибут, например, когда вы хотите дополнить встроенный элемент». Это именно ваш случай: вы увеличиваете элемент tr (вместо добавления пользовательского элемента в DOM).

ConnorsFan 01.04.2019 04:01

@ConnorsFan: сэр, не могли бы вы сказать мне, как использовать с td?

Kapil Soni 18.08.2021 16:05

Как упоминалось в @ConnorsFan, вам нужно определить свой компонент как атрибут, добавив квадратные скобки в селектор вашего компонента, но нет необходимости добавлять перед ним «tr», поэтому следующее должно быть хорошо:

@Component({
  selector: '[app-table-row]',
  ...
})

Затем используйте его следующим образом:

<tr app-table-row 
    *ngFor = "let item of items"
    [myProp] = "item"
    (myEvent) = "executeEvent($event)"
    ...>
</tr>

Добавление tr перед квадратными скобками ограничивает использование компонента tr элементами. Вероятно, это то, что нам нужно, если компонент содержит элементы td и th.

ConnorsFan 18.08.2021 16:09

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