Owl Carousel not identifying elements of ng-repeat

前端 未结 2 561
感情败类
感情败类 2020-12-21 22:00

I\'m trying to get owl carousel to work in Angular.

I want to markup like this in my view, since I have many galleries :



        
相关标签:
2条回答
  • 2020-12-21 22:12

    Had to make some changes to your directive so it would work with multiple carousels on the same page. Here is a link to a working plnkr

    var app = angular.module('plunker', []);
    
    app.controller('MainCtrl', function($scope) {
      $scope.items1 = [1,2,3,4,5];
      $scope.items2 = [1,2,3,4,5,6,7,8,9,10];
    }).directive("owlCarousel", function() {
        return {
            restrict: 'E',
            transclude: false,
            link: function (scope) {
                scope.initCarousel = function(element) {
                  // provide any default options you want
                    var defaultOptions = {
                    };
                    var customOptions = scope.$eval($(element).attr('data-options'));
                    // combine the two options objects
                    for(var key in customOptions) {
                        defaultOptions[key] = customOptions[key];
                    }
                    // init carousel
                    $(element).owlCarousel(defaultOptions);
                };
            }
        };
    })
    .directive('owlCarouselItem', [function() {
        return {
            restrict: 'A',
            transclude: false,
            link: function(scope, element) {
              // wait for the last item in the ng-repeat then call init
                if(scope.$last) {
                    scope.initCarousel(element.parent());
                }
            }
        };
    }]);
    

    Here is the HTML

    <!DOCTYPE html>
    <html ng-app="plunker">
    
      <head>
        <meta charset="utf-8" />
        <title>AngularJS Plunker</title>
        <script>document.write('<base href="' + document.location + '" />');</script>
        <link rel="stylesheet" href="style.css" />
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/owl-carousel/1.3.3/owl.carousel.min.css" />
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/owl-carousel/1.3.3/owl.theme.min.css" />
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/owl-carousel/1.3.3/owl.transitions.min.css" />
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/owl-carousel/1.3.3/owl.carousel.min.js" />
        <script data-require="angular.js@1.3.x" src="https://code.angularjs.org/1.3.15/angular.js" data-semver="1.3.15"></script>
        <script data-require="jquery@2.1.3" data-semver="2.1.3" src="http://code.jquery.com/jquery-2.1.3.min.js"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/owl-carousel/1.3.3/owl.carousel.min.js"></script>
        <script src="app.js"></script>
      </head>
    
      <body ng-controller="MainCtrl">
        <data-owl-carousel class="owl-carousel" data-options="{navigation: true, pagination: false, rewindNav : false}">
          <div owl-carousel-item="" ng-repeat="item in ::items1" class="item">
            <p>{{::item}}</p>
          </div>
        </data-owl-carousel>
        <data-owl-carousel class="owl-carousel" data-options="{navigation: false, pagination: true, rewindNav : false}">
          <div owl-carousel-item="" ng-repeat="item in ::items2" class="item">
            <p>{{::item}}</p>
          </div>
        </data-owl-carousel>
      </body>
    
    </html>
    
    0 讨论(0)
  • 2020-12-21 22:13

    You want to take a look at these answer:

    ng-repeat finish event

    AngularJS event for when model binding or ng-repeat is complete?

    angular.module('dir.owlCarousel', [])
      .directive('owlCarousel',[function() {
        return {
          restrict: 'EA',
          transclude: false,
          scope: {
            owlOptions: '='
          },
          link: function(scope, element, attrs) {
              scope.initCarousel = function() {
                $(element).owlCarousel(scope.owlOptions);
              };
            }
          }
        };
      }])
      .directive('owlCarouselItem',[function() {
         return function(scope) {
         if (scope.$last) {
            scope.initCarousel();
         }
        };
      }]);
    
    <owl-carousel owl-options="owlOptions">
      <div owl-carousel-item ng-repeat="image in gallery" class="item">
        <p>hello</p>
      </div>
    </owl-carousel>
    
    0 讨论(0)
提交回复
热议问题