Je veux utiliser le carrousel bootstrap avec js angulaire pour afficher des images dans le contenu du carrousel . Mais, lorsque les liens de navigation ont été cliqués, la page est vide.
Mon exemple de code est comme suit. ( Remarque : Ce code ne fonctionne bien qu'avec Bootstrap 3.1.0 mais pas avec AngularJS 1.2.13 )
<div id="Carousel" class="carousel slide">
<ol class="carousel-indicators">
<li data-target="Carousel" data-slide-to="0" class="active"></li>
<li data-target="Carousel" data-slide-to="1"></li>
<li data-target="Carousel" data-slide-to="2"></li>
</ol>
<div class="carousel-inner">
<div class="item active">
<img src="images/c.png" class="img-responsive">
</div>
<div class="item">
<img src="images/b.png" class="img-responsive">
</div>
<div class="item">
<img src="images/a.png" class="img-responsive">
</div>
</div>
<a class="left carousel-control" href="#Carousel" data-slide="prev">
<span class="glyphicon glyphicon-chevron-left"></span>
</a>
<a class="right carousel-control" href="#Carousel" data-slide="next">
<span class="glyphicon glyphicon-chevron-right"></span>
</a>
</div>
En se basant sur ce que rbanning a dit, au lieu d’ajouter le gestionnaire d’événements, vous pouvez simplement, après avoir remplacé les balises ancres par des balises span, remplacer l’attribut href par un attribut "data-target" et bootstrap se charge du reste.
Ainsi:
<div id="Carousel" class="carousel slide">
<ol class="carousel-indicators">
<li data-target="Carousel" data-slide-to="0" class="active"></li>
<li data-target="Carousel" data-slide-to="1"></li>
<li data-target="Carousel" data-slide-to="2"></li>
</ol>
<div class="carousel-inner">
<div class="item active">
<img src="images/c.png" class="img-responsive">
</div>
<div class="item">
<img src="images/b.png" class="img-responsive">
</div>
<div class="item">
<img src="images/a.png" class="img-responsive">
</div>
</div>
<span class="left carousel-control" data-target="#Carousel" data-slide="prev">
<span class="glyphicon glyphicon-chevron-left"></span>
</span>
<span class="right carousel-control" data-target="#Carousel" data-slide="next">
<span class="glyphicon glyphicon-chevron-right"></span>
</span>
</div>
Comme mentionné, le problème concerne AngularJS et ngRoute qui interceptent les clics sur a-link. J'ai eu ce problème, mais je ne voulais pas utiliser l'interface utilisateur angulaire Bootstrap (comme décrit dans d'autres réponses).
Ainsi, j'ai changé les éléments de contrôle .carousel de liens ( a tags) en étendues.
<span class="left carousel-control" data-slide="prev">
<span class="glyphicon glyphicon-chevron-left"></span>
</span>
<span class="right carousel-control" data-slide="next">
<span class="glyphicon glyphicon-chevron-right"></span>
</span>
Ensuite, j'ai ajouté un gestionnaire d'événements comme suit ...
$('.carousel').carousel({
interval: 5000,
pause: "hover",
wrap: true
})
.on('click', '.carousel-control', handle_nav);
var handle_nav = function(e) {
e.preventDefault();
var nav = $(this);
nav.parents('.carousel').carousel(nav.data('slide'));
}
J'espère que cela t'aides...
Définissez target="_self"
dans vos commandes du carrousel:
<a class="left carousel-control" href="#Carousel" data-slide="prev" target="_self">
Si vous n'avez pas besoin de lier votre carrousel, vous pouvez résoudre ce problème en ajoutant un élément de niveau supérieur avec la directive ng-non-bindable
:
<div ng-non-bindable>
<div id="Carousel" class="carousel slide">
<!-- carousel content -->
</div>
</div>
Vous pouvez également simplement utiliser ng-click sur les deux contrôles.
J'utilise ceci sur mon site (note href=""
est vide maintenant)
En vue:
<a class="left carousel-control" href="" ng-click="slide('prev')" role="button" data-slide="prev">
<span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span>
</a>
<a class="right carousel-control" ng-click="slide('next')" role="button" data-slide="next">
<span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>
</a>
Dans le contrôleur:
$scope.slide = function (dir) {
$('#carouselId').carousel(dir);
};
Vous pouvez créer une fonction et la placer sur la flèche précédente/suivante en HTML.
$scope.prevSlide = function() {
$('#MY-CAROUSEL-ID').carousel('prev');
};
Votre code fonctionne bien.
Aucun problème dans le code que vous avez montré.
Cela fonctionne, sans modifier l'exemple de bootstrap d'origine
$("a.carousel-control").click(function(e){
e.preventDefault();
$(this).parent().carousel($(this).data("slide"));
});
Pourquoi ne pas utiliser l'interface utilisateur angulaire pour obtenir Bootstrap et Angular pour bien jouer?
http://angular-ui.github.io/bootstrap/#/carousel
MODIFIER:
Votre code ne fonctionne pas car sur les liens de navigation, les attributs href sont définis sur #Carousel. Ainsi, lorsque vous cliquez sur ces liens, le routeur angulaire essaie de changer de vue et d’afficher celui appelé Carrousel qui n’est pas défini dans votre $ routeProvider, d'où la page blanche.
Puisque vous utilisez Bootstrap.js, il semble que vous ayez absolument besoin de ces attributs href, alors peut-être débarrassez-vous du routeur. Ou essayez l’UI angulaire;)