So I have a carousel that looks like this:
<div class="jumbotron-carousel" carousel interval="controller.jumbotronInterval" no-pause="true" no-transition="true">
<div class="slide" slide ng-repeat="slide in controller.jumbotron" active="slide.active" style="background-image: url({{ slide.image }});">
</div>
</div>
and my controller looks like this (simplified for brevity)
.controller('HomeController', ['preloader', function (preloader) {
var self = this;
self.jumbotronInterval = 2000;
self.jumbotron = [];
var createSlides = function () {
var slides = [{
image: '/assets/images/carousel/jumbotron/_MG_0629.jpg'
}, {
image: '/assets/images/carousel/jumbotron/_J5Y6128.jpg'
}, {
image: '/assets/images/carousel/jumbotron/_J5Y6588.jpg'
}, {
image: '/assets/images/carousel/jumbotron/_J5Y6779.jpg'
}, {
image: '/assets/images/carousel/jumbotron/_J5Y6929.jpg'
}, {
image: '/assets/images/carousel/jumbotron/_J5Y7157.jpg'
}, {
image: '/assets/images/carousel/jumbotron/_J5Y7286.jpg'
}, {
image: '/assets/images/carousel/jumbotron/_MG_0151.jpg'
}, {
image: '/assets/images/carousel/jumbotron/_MG_0337.jpg'
}, {
image: '/assets/images/carousel/jumbotron/_MG_0417.jpg'
}, {
image: '/assets/images/carousel/jumbotron/_MG_1300.jpg'
}];
for (var i = 0; i < slides.length; i++) {
var slide = slides[i];
preloader(slide.image).then(function () {
self.jumbotron.push(slide);
console.log(self.jumbotron);
});
}
};
createSlides();
}]);
So basically what is happening is my preloader, which waits for the image to load, and then moves the slider to my array. Here's what my service looks like (pretty simple):
.factory('preloader', ['$q', function ($q) {
return function (url) {
var deffered = $q.defer(),
image = new Image();
image.src = url;
if (image.complete) {
deffered.resolve();
} else {
image.addEventListener('load', function () {
deffered.resolve();
});
image.addEventListener('error', function () {
deffered.reject();
});
}
return deffered.promise;
}
}])
The problem is that when I click a slide on a slide array, I get an error message in angular:
Error: [ngRepeat: dupes]
I made a console log after completing each image download, and then the application complains. I “could” wait until all the images were loaded, but I would prefer to add them sequentially. Does anyone know how I can do this?