Angular — карусель Bootstrap 5 не работает

Я пытаюсь использовать Bootstrap Carousel в Angular (17). Кнопки «Предыдущий» и «Далее» не работают. Карусель остается на первом изображении. Никаких ошибок в консоли. Я вижу здесь много вопросов с одной и той же проблемой, но ни на один из них нет ответа (это работает).

Я скопировал/вставил следующий HTML-код (в компоненте с именем elements.comComponent.html) с веб-сайта Bootstrap и добавил несколько случайных изображений из Интернета:

<div class = "bd-example">
    <div id = "carouselExampleCaptions" class = "carousel slide" data-ride = "carousel">
      <ol class = "carousel-indicators">
        <li data-target = "#carouselExampleCaptions" data-slide-to = "0" class = "active"></li>
        <li data-target = "#carouselExampleCaptions" data-slide-to = "1"></li>
        <li data-target = "#carouselExampleCaptions" data-slide-to = "2"></li>
      </ol>
      <div class = "carousel-inner">
        <div class = "carousel-item active">
          <img src = "https://abeltasmanmuseum.nl/wp-content/uploads/2024/02/Foto-Borg-Rikkerda.jpeg" class = "d-block w-100" alt = "...">
          <div class = "carousel-caption d-none d-md-block">
            <h5>First slide label</h5>
            <p>Nulla vitae elit libero, a pharetra augue mollis interdum.</p>
          </div>
        </div>
        <div class = "carousel-item">
          <img src = "https://abeltasmanmuseum.nl/wp-content/uploads/2024/02/1.jpg" class = "d-block w-100" alt = "...">
          <div class = "carousel-caption d-none d-md-block">
            <h5>Second slide label</h5>
            <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
          </div>
        </div>
        <div class = "carousel-item">
          <img src = "https://abeltasmanmuseum.nl/wp-content/uploads/2024/02/1.jpg" class = "d-block w-100" alt = "...">
          <div class = "carousel-caption d-none d-md-block">
            <h5>Third slide label</h5>
            <p>Praesent commodo cursus magna, vel scelerisque nisl consectetur.</p>
          </div>
        </div>
      </div>
      <a class = "carousel-control-prev" href = "#carouselExampleCaptions" role = "button" data-slide = "prev">
        <span class = "carousel-control-prev-icon" aria-hidden = "true"></span>
        <span class = "sr-only">Previous</span>
      </a>
      <a class = "carousel-control-next" href = "#carouselExampleCaptions" role = "button" data-slide = "next">
        <span class = "carousel-control-next-icon" aria-hidden = "true"></span>
        <span class = "sr-only">Next</span>
      </a>
    </div>
  </div>

Файл Typescript выглядит следующим образом (там ничего не менялось, просто файл Angular TS по умолчанию):

import { Component } from '@angular/core';


@Component({
  selector: 'app-goals',
  standalone: true,
  imports: [],
  templateUrl: './goals.component.html',
  styleUrl: './goals.component.css'
})
export class GoalsComponent {

}

В файле angular.json я добавил ссылку Bootstrap как на скрипты, так и на стили:

"styles": [
  "src/styles.css",
  "node_modules/bootstrap/dist/css/bootstrap.min.css"
],
"scripts": [
  "node_modules/jquery/dist/jquery.min.js",
  "node_modules/bootstrap/dist/js/bootstrap.min.js"
]

Есть ли у кого-нибудь идеи, чего еще не хватает?

Большое спасибо!!

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
1
0
79
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Из документации Bootstrap Carousel,

Элементы управления и индикатора должны иметь атрибут data-bs-target (или href для ссылок), который соответствует идентификатору элемента .carousel.

В своем коде вы используете атрибут data-*, который был доступен только до версии Bootstrap 5. Согласно документации по миграции ,

Атрибуты данных для всех плагинов JavaScript теперь распределены по пространству имен, чтобы помочь отличить функциональность Bootstrap от стороннего и вашего собственного кода. Например, мы используем data-bs-toggle вместо data-toggle.

Перенесите все атрибуты data-* в data-bs-*.

<div class = "bd-example">
  <div id = "carouselExampleCaptions" class = "carousel slide" data-bs-ride = "carousel">
    <ol class = "carousel-indicators">
      <li
        data-bs-target = "#carouselExampleCaptions"
        data-bs-slide-to = "0"
        class = "active"
      ></li>
      <li data-bs-target = "#carouselExampleCaptions" data-bs-slide-to = "1"></li>
      <li data-bs-target = "#carouselExampleCaptions" data-bs-slide-to = "2"></li>
    </ol>
    <div class = "carousel-inner">
      <div class = "carousel-item active">
        <img
          src = "https://abeltasmanmuseum.nl/wp-content/uploads/2024/02/Foto-Borg-Rikkerda.jpeg"
          class = "d-block w-100"
          alt = "..."
        />
        <div class = "carousel-caption d-none d-md-block">
          <h5>First slide label</h5>
          <p>Nulla vitae elit libero, a pharetra augue mollis interdum.</p>
        </div>
      </div>
      <div class = "carousel-item">
        <img
          src = "https://abeltasmanmuseum.nl/wp-content/uploads/2024/02/1.jpg"
          class = "d-block w-100"
          alt = "..."
        />
        <div class = "carousel-caption d-none d-md-block">
          <h5>Second slide label</h5>
          <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
        </div>
      </div>
      <div class = "carousel-item">
        <img
          src = "https://abeltasmanmuseum.nl/wp-content/uploads/2024/02/1.jpg"
          class = "d-block w-100"
          alt = "..."
        />
        <div class = "carousel-caption d-none d-md-block">
          <h5>Third slide label</h5>
          <p>
            Praesent commodo cursus magna, vel scelerisque nisl consectetur.
          </p>
        </div>
      </div>
    </div>
    <a
      class = "carousel-control-prev"
      href = "#carouselExampleCaptions"
      role = "button"
      data-bs-slide = "prev"
    >
      <span class = "carousel-control-prev-icon" aria-hidden = "true"></span>
      <span class = "sr-only">Previous</span>
    </a>
    <a
      class = "carousel-control-next"
      href = "#carouselExampleCaptions"
      role = "button"
      data-bs-slide = "next"
    >
      <span class = "carousel-control-next-icon" aria-hidden = "true"></span>
      <span class = "sr-only">Next</span>
    </a>
  </div>
</div>

Демо @ StackBlitz

О боже, это действительно работает! Большое спасибо! Не работают только кнопки «Назад» и «Далее». Есть идеи, что может вызвать это?

Bart Koolhaas 24.04.2024 11:53

Извините, я заметил, что кнопки «Предыдущий» и «Далее» используют атрибут data-slide. Также следует заменить на data-bs-slide. Посмотрите мое демо еще раз. Спасибо

Yong Shun 24.04.2024 11:55

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