Тело таблицы PrimeNG не отображает данные

У меня возникли проблемы с получением данных в оверлей. Где я ошибся?

Моя цель - извлечь из пользовательского массива данные (например, cId, зарегистрированные часы) и отобразить их в моей таблице.

<button
  [disabled] = "false"
  (click) = "op1.show($event)"
  pButton
  type = "button"
  class = "ui-button-primary"
  label = "View"
></button>

<p-overlayPanel #op1 [showCloseIcon] = "true" [dismissable] = "false">
  <p-table [value] = "day" [style] = "{ width: '400px' }" [rows] = "5">
    <ng-template pTemplate = "header">
      <tr>
        <td class = "headerItem">{{ wbsElement }}</td>
        <td class = "headerItem">{{ saturday }}</td>
        <td class = "headerItem">{{ sunday }}</td>
        ...
        <td class = "headerItem">{{ total }}</td>
      </tr>
    </ng-template>
    <ng-template pTemplate = "body" let-day>
      <tr>
        <td>{{ user.cId }}</td>
        <td *ngFor = "let day of user.days">{{ day.hoursLogged }}</td>
        <td>{{ totalHours }}</td>
      </tr>
    </ng-template>
  </p-table>
</p-overlayPanel>

Выше у меня есть мой шаблон, который должен создать мой оверлей, как показано здесь

  wbsElement = Constants.WBS_ELEMENT;
  saturday = Day.SATURDAY;
  sunday = Day.SUNDAY;
  monday = Day.MONDAY;
  ...
  total = Constants.TOTAL;
  user: User;
  totalHours: number = 0;

  constructor(private configService: ConfigService) {}

  ngOnInit() {
    this.configService.getUsers().subscribe(users => {
      this.user = users[0];
    });
    this.getTotalHours();
  }

  private getTotalHours() {
    this.user.days.forEach(day => (this.totalHours += day.hoursLogged));
  }

Это то, что у меня есть в моем файле ts. пользователь принимает фиктивные данные из первого элемента массива пользователей. Вот предварительный просмотр того, что он получает:

{
      name: "test",
      cId: "akaskdasda",
      email: "[email protected]",
      platformUser: "akakaksda",
      days: [
        { weekday: Day.MONDAY, hoursLogged: 5 },
        { weekday: Day.TUESDAY, hoursLogged: 8 },
        ...
        { weekday: Day.SUNDAY, hoursLogged: 5 }
      ]
 },

В настоящее время внутри консоли не отображается ошибка, которая помогла бы мне выяснить причину такого поведения, и вывод нежелательно.

Как вы можете видеть внутри ссылки imgur, элементы выходят за пределы таблицы (я не понимаю такого поведения). Я попытался удалить свои двойные привязки из тела таблицы и распечатать случайные данные, чтобы посмотреть, сработает ли это (я также удалил [value]="day" и let-day, когда я это сделал), однако ничего не было показано. Последняя вещь Я пытался заменить ng-template на div (потому что, по сути, это то, чем они являются, насколько я понимаю), но это тоже не помогло.

Поведение ключевого слова "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) для оценки ваших знаний,...
2
0
5 170
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы должны присвоить переменную user значению таблицы. Попробуй это.

<p-overlayPanel #op1 [showCloseIcon] = "true" [dismissable] = "false">
  <p-table [value] = "user" [style] = "{ width: '400px' }" [rows] = "5">
  <ng-template pTemplate = "header">
    <tr>
      <td class = "headerItem">{{ wbsElement }}</td>
      <td class = "headerItem">{{ saturday }}</td>
      <td class = "headerItem">{{ sunday }}</td>
      ...
      <td class = "headerItem">{{ total }}</td>
    </tr>
  </ng-template>
  <ng-template pTemplate = "body" let-user>
    <tr>
      <td>{{ user.cId }}</td>
      <td *ngFor = "let day of user.days">{{ day.hoursLogged }}</td>
      <td>{{ totalHours }}</td>
    </tr>
  </ng-template>
  </p-table>
</p-overlayPanel>

только что попробовал, и выдает ошибку: OverlayComponent.html:11 ERROR TypeError: this.value.sort не является функцией

tearswep 09.04.2019 09:46

строка 11 из моего файла шаблона: <p-overlayPanel #op1 [showCloseIcon] = "true" [dismissable] = "false">

tearswep 09.04.2019 09:47

Не могли бы вы предоставить stalkbitz или plunker для демонстрации?

Zarna Borda 09.04.2019 11:02

Мне удалось решить эту проблему, заменив p-table на table (потому что в противном случае мне пришлось бы переписать способ работы с данными, а я этого не хочу) и возиться с css

tearswep 09.04.2019 11:28
Ответ принят как подходящий

Удалось решить эту проблему, отказавшись от p-таблицы и используя вместо нее обычную таблицу. По-видимому, как я нашел здесь, p-table ожидает массив из-за [value]="user".

Я понимаю, что это очень поздно, но вы также можете передать пустой массив значениям, и p-таблица будет работать. Добавлю ответ ниже

Jeremy 11.12.2020 23:46

Это правильно, что PrimeNg требует [value] для создания статической таблицы.

Однако вы можете передать пустой массив и сделать все остальное статически по желанию. Итак, если внутри <p-table... вы добавите [value] = "[[]]", вы можете настроить все остальное статически внутри <tr>s и <td>s.

Я бы разместил это здесь на случай, если у кого-то еще возникнет аналогичная проблема, прежде чем полностью отказаться от p-table.

Спасибо. Подойдет массив с одним объектом (в комментарии к tearswep вы упомянули пустой массив). Это работает: [value] = "[{}]" Ваш массив в массиве будет работать, так как внутренний массив является объектом. Однако пустой объект кажется более аккуратным.

Sam 13.10.2021 14:05

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