Amila Iddamalgoda Amila Iddamalgoda - 4 months ago 113
AngularJS Question

Jquery bxslider not working + Angular js ng-repeat issue

I'm working on a Angular js project where I get number of terms and i'm using ng repeat to show each term in the front end .it works fine.I have shown them in a bx slider (jquery responsive bxslider)
enter image description here

Following will be the main code.

Javascript code

<script type="text/javascript">
$(document).ready(function(){
$('.slider4').bxSlider({
slideWidth: 300,
minSlides: 2,
maxSlides: 3,
moveSlides: 1,
slideMargin: 10
});
});
</script>


HTML code

<div class="slider4">
<div ng-repeat="term in terms" > {{term.name}}</div>
</div>


I can see all the terms are loaded nicely but when I click arrow keys slider doesn't work
.I can't figure out the issue.I'm pretty sure the problem is with ng-repeat. Because when i remove ng-repeat and just add some images/divs to the
<div class="slider4"></div>
it works fine.

Can some one help me? Why is this not working? Is it a draw back in Angular js?Can't I achieve my goal?

Answer

bxSlider doesn't work because the jQuery executes before your ng-repeat has finished.

You can use something like finishingmoves' directive to execute a function after ng-repeat has finished.

The directive is the following:

var module = angular.module('testApp', [])
.directive('onFinishRender', function ($timeout) {
return {
    restrict: 'A',
    link: function (scope, element, attr) {
        if (scope.$last === true) {
            $timeout(function () {
                scope.$emit('ngRepeatFinished');
            });
        }
    }
    }
});

(finishingmoves directive from here: Calling a function when ng-repeat has finished)

You can see an example of it here: http://jsfiddle.net/paulocoelho/BsMqq/4/

Hope that helps and don't forget to vote!

Comments