Ngb-tabset и динамически созданные вкладки

Я использую Angular 5.2.10 (также проверено в 5.0.2) + Bootstrap 4.1.1 (также проверено в 4.0.0) + ng-bootstrap 1.1.2 и пытаюсь заставить tab-set работать с динамически создаваемыми вкладками.

Я привязываю ngb-tab к массиву через *ngFor:

<ngb-tabset>
    <ngb-tab
      id = "tab.id"
      *ngFor = "let tab of tabs">

        <ng-template ngbTabTitle>
            <span>{{ tab.title }}</span>

            <span
                class = "close"
                (click) = "onClosiClick(tab)">
                &times;
            </span>
        </ng-template>

        <ng-template ngbTabContent>Content of {{ tab.title }}</ng-template>

    </ngb-tab>
</ngb-tabset>

Но у этого довольно простого шаблона есть 3 проблемы:

  1. При добавлении нескольких вкладок их содержимое отображается одной ниже другой.
  2. Невозможно переключаться между вкладками.
  3. При нажатии кнопки «Закрыть» (x) в этом примере приложение перезагружается.

Вот Stackblitz. Кроме того, я создал проблема на Github.

Я что-то делаю не так или этой функции еще не хватает в ng-bootstrap?

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

Ответы 1

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

Идентификатор устанавливается в строку "tab.id". Вместо этого я думаю, что это должен быть [attr.id] = "tab.id", который установит для атрибута id значение, содержащееся в tab.id.

Похоже, что в репозитории ng-bootstrap есть открытая проблема, в которой есть временное решение для перезагрузки приложения. https://github.com/ng-bootstrap/ng-bootstrap/issues/1909

https://stackblitz.com/edit/ng-bootstrap-tab-set-issues-fj8koq?file=app/app.component.ts

Вы правы, спасибо! Это устраняет проблемы №1 и №2. Однако при нажатии кнопки «Закрыть» (x) приложение перезагружается. Вы знаете, почему это так?

Alexander Abakumov 04.05.2018 16:26

Извини, должно быть, я это пропустил. Я обновил ответ информацией о том, как предотвратить перезагрузки

Stout01 04.05.2018 17:41

Отлично, спасибо за исправления и за указание на существующую проблему!

Alexander Abakumov 04.05.2018 19:07

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