Bootstrap 4轮播不适用于AngularJS UI-Bootstrap
Posted
技术标签:
【中文标题】Bootstrap 4轮播不适用于AngularJS UI-Bootstrap【英文标题】:Bootstrap 4 carousel not working with AngularJS UI-Bootstrap 【发布时间】:2019-02-24 08:00:24 【问题描述】:我正在尝试在我的 bootstrap 4 网站中使用基于角度的轮播。当我使用 bootstrap 3(bootstrap.min.css) 时,它运行良好。当我尝试更改引导程序 4(bootstrap.min.js)时,它不起作用。我不知道如何修改 bootstrap 4 角度版本的轮播滑块。我试过下面的代码。任何人都可以帮助我实现这一目标。
jsfiddle link
angular.module('app', ['ui.bootstrap']);
function CarouselDemoCtrl($scope)
$scope.myInterval = 3000;
$scope.slides = [
image: 'https://eadb.org/wp-content/uploads/2013/09/placeholder.jpg'
,
image: 'https://eadb.org/wp-content/uploads/2013/09/placeholder.jpg'
,
image: 'https://eadb.org/wp-content/uploads/2013/09/placeholder.jpg'
,
image: 'https://eadb.org/wp-content/uploads/2013/09/placeholder.jpg'
];
//# sourceURL=pen.js
#slides_control>div
height: 200px;
img
margin: auto;
width: 400px;
#slides_control
position: absolute;
width: 400px;
left: 50%;
top: 20px;
margin-left: -200px;
<!DOCTYPE html>
<html lang="en">
<head>
<!-- ========== Meta Tags ========== -->
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="Association - Corporate Business Template">
<title>Template</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">
<!--<link href="//netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css" rel="stylesheet"> -->
</head>
<body>
<div ng-app="app">
<div ng-controller="CarouselDemoCtrl" id="slides_control">
<div>
<carousel interval="myInterval">
<slide ng-repeat="slide in slides" active="slide.active">
<img ng-src="slide.image">
<div class="carousel-caption">
<h4>Slide $index+1</h4>
</div>
</slide>
</carousel>
</div>
</div>
</div>
<!-- boostrap 4 -->
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script>
<!-- boostrap 4 -->
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js"></script>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/angular-ui-bootstrap/0.10.0/ui-bootstrap-tpls.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
</body>
</html>
【问题讨论】:
您的示例包含 jQuery 两次 - 如果您的“真实”代码执行相同的操作,这将导致问题。 @TiesonT。删除 jquery 后也是同样的问题 幻灯片类在 BS4 (carousel-item
) 中有所不同(请参阅 getbootstrap.com/docs/4.1/components/carousel),因此 Angular 脚本为 Bootstrap 4 输出了错误的标记。我假设您必须切换到某些东西喜欢ng-bootstrap.github.io/#/home
UI-Bootstrap 不支持 Bootstrap 4。而是使用UI Bootstrap 4。由 AngularUI 团队用纯 AngularJS 编写的引导组件。由Morgul 移植到 Bootstrap 4。
@georgeawg 好的。已注明。
【参考方案1】:
最好的方法是ui bootstrap 4中的轮播指令
UI 引导程序 4
AngularUI 团队用纯 AngularJS 编写的引导组件
Morgul 移植到 Bootstrap 4
<div uib-carousel active="active" interval="myInterval" no-wrap="noWrapSlides">
<div uib-slide ng-repeat="slide in slides track by slide.id" index="slide.id">
<img ng-src="slide.image" style="margin:auto;">
<div class="carousel-caption">
<h4>Slide slide.id</h4>
<p>slide.text</p>
</div>
</div>
</div>
【讨论】:
【参考方案2】:carousel 依赖于 angular-ui-bootstrap,而 angular-ui-bootstrap 又依赖于 bootstrap3
您使用的是 bootstrap4,因此 angular-ui-bootstrap 输出错误的 html
改变:
<div uib-slide ng-repeat="slide in slides track by slide.id" index="slide.id">
到:
<div uib-slide class="carousel-item" ng-repeat="slide in slides track by slide.id" index="slide.id">
然后删除 bootstrap3
【讨论】:
【参考方案3】:正如 Tieson 在评论中已经提到的,这主要是因为您的代码中有多个 jQuery 引用。
【讨论】:
以上是关于Bootstrap 4轮播不适用于AngularJS UI-Bootstrap的主要内容,如果未能解决你的问题,请参考以下文章
Bootstrap CSS/Javascript 仅用于轮播
JavaScript 不适用于 bootstrap 4 + thymeleaf