Диапазон таблиц и строк

#html #css #angular

#HTML #css #угловой

Вопрос:

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

 this.ateco2007 = [{code:  this.anagrafica?.ateco2007?.code, description: this.anagrafica?.ateco2007?.description}]

if(this.anagrafica?.atecoSecondari amp;amp; this.anagrafica?.atecoSecondari.length > 0) {
   let i = 0;
   for(let elem of this.anagrafica.atecoSecondari) {
      this.atecoSecondari.push({
         index: i  ,
         code: elem.code,
         description: elem.description
      });
   }
 

…где ateco2007 всегда имеет один элемент, вместо этого atecoSecondari может иметь несколько значений. Но всегда есть пара код / описание.

Я хочу показать эти данные в таблице. Первая строка всегда будет одной строкой (ateco 2007), других строк может быть несколько.

Мне нужна такая структура, как эта:

В первом столбце всегда будет указано исправление с меткой, во втором столбце показан код, а в последнем — описание.

Я попробовал следующее, это почти правильно:

введите описание изображения здесь

Но я хочу добиться чего-то более близкого к следующему:

введите описание изображения здесь

Как вы видите, есть что-то вроде rowspan, а во втором и третьем столбцах строки имеют границы и находятся в одной строке.

Я попробовал следующий код:

 <p-table [value]="ateco2007" [autoLayout]="true">
  <ng-template pTemplate="body">
    <tr>
      <td class="font-weight-bold"> {{'cliente.ateco'|translate}}</td>
      <td>{{ateco2007[0]?.code}}</td>
      <td class="text-left">{{ateco2007[0]?.description}}</td>
    </tr>
    <tr>
      <td rowspan="atecoSecondari.length" class="font-weight-bold">
        {{'cliente.atecoSecondari'|translate}}</td>
      <td>
        <table>
          <tr *ngFor="let elem of atecoSecondari">
            <td>{{elem.code}}</td>
          </tr>
        </table>
      </td>
      <td>
        <table>
          <tr *ngFor="let elem of atecoSecondari">
            <td class="text-left">{{elem.description}}</td>
          </tr>
        </table>
      </td>
    </tr>
  </ng-template>
 

Но я не знаю, лучший ли это способ построить таблицу.

Ответ №1:

Я решил это таким образом

  <p-table [value]="ateco2007" [autoLayout]="true">
   <ng-template pTemplate="body" let-rowIndex="rowIndex">
     <tr>
       <td class="font-weight-bold"> {{'cliente.ateco'|translate}}</td>
       <td>{{ateco2007[0]?.code}}</td>
       <td class="text-left">{{ateco2007[0]?.description}}</td>
     </tr>
     <tr *ngFor="let elem of atecoSecondari">
       <td *ngIf="rowIndex == elem.index" [attr.rowspan]="atecoSecondari.length" class="font-weight-bold">
         {{'cliente.atecoSecondari'|translate}}
       </td>
       <td>{{elem.code}}</td>
         <td class="text-left">{{elem.description}}</td>
      </tr>
   </ng-template>
 </p-table>
 

Я добавил диапазон строк и изменил структуру.