bootstrap image carousel does not work in angular
The first image of the carousel appears in my page, however the buttons do not work and neither does the images move. I have tried using different types of bootstrap carousel but to no avail. I saw some answers which suggested to add jQuery and Bootstrap links to the top, so i tried that but didn’t work either. I think the issue could be due to the fact that i am working on angular? I also noticed that when i clicked on the buttons, my localhost link would change from localhost:3000
to localhost:3000/#carouselExampleIndicators
home.component.html
<header> <link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" rel="stylesheet"> <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="carouselExampleIndicators" class="carousel slide" data-ride="carousel"> <ol class="carousel-indicators"> <li data-target="#carouselExampleIndicators" data-slide-to="0" class="active"></li> <li data-target="#carouselExampleIndicators" data-slide-to="1"></li> <li data-target="#carouselExampleIndicators" data-slide-to="2"></li> </ol> <div class="carousel-inner"> <div class="carousel-item active"> <img class="d-block w-100" src="https://placeimg.com/1080/500/animals" alt="First slide"> <div class="carousel-caption d-none d-md-block"> <h5>My Caption Title (1st Image)</h5> <p>The whole caption will only show up if the screen is at least medium size.</p> </div> </div> <div class="carousel-item"> <img class="d-block w-100" src="https://placeimg.com/1080/500/arch" alt="Second slide"> </div> <div class="carousel-item"> <img class="d-block w-100" src="https://placeimg.com/1080/500/nature" alt="Third slide"> </div> </div> <a class="carousel-control-prev" href="#carouselExampleIndicators" 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="#carouselExampleIndicators" role="button" data-slide="next"> <span class="carousel-control-next-icon" aria-hidden="true"></span> <span class="sr-only">Next</span> </a> </div> </header>
index.html
<!doctype html> <html lang="en"> <head> <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> <link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500" rel="stylesheet"> <meta charset="utf-8"> <title>CastleApp</title> <base href="/"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="icon" type="image/x-icon" href="favicon.ico"> <link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" rel="stylesheet"> </head> <body> <app-root></app-root> </body> </html>
Bootstrap requires JQuery for this kind of actions. You either need to add jquery in your index.html or add it to angular-cli.json
or angular.json
(depending on your version of Angular):
Approach 1 (Recommended):
Run first this command to install both JQuery and Bootstrap:
$ npm install jquery bootstrap --save
Then add these lines to angular-cli.json
or angular.json
(depending on your version of Angular)
"styles": [ "styles.css", "../node_modules/bootstrap/dist/css/bootstrap.min.css" ], "scripts": [ "../node_modules/jquery/dist/jquery.min.js", "../node_modules/popper.js/dist/popper.min.js", "../node_modules/bootstrap/dist/js/bootstrap.min.js" ],
Approach 2 (Not recommended):
Add the needed scripts in your index.html. Be careful though as you’ll download these templates each time you reload the page.
<!doctype html> <html lang="en"> <head> <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> <link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500" rel="stylesheet"> <meta charset="utf-8"> <title>CastleApp</title> <base href="/"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="icon" type="image/x-icon" href="favicon.ico"> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous"> </head> <body> <app-root></app-root> <!-- Optional JavaScript --> <!-- jQuery first, then Popper.js, then Bootstrap JS --> <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script> </body> </html>
More information from the documentation