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 4 轮播包装问题

Bootstrap CSS/Javascript 仅用于轮播

JavaScript 不适用于 bootstrap 4 + thymeleaf

导航栏下拉菜单不适用于 Angular 和 Bootstrap 4

导航栏切换器不适用于 Bootstrap 4