Search code examples
javascriptangularjsangularjs-ng-repeatangular-ng-if

Angular-slick ng-repeat $http get


I've been trying all the week end to display data (that I fetch with $http.get) in the slick angular carousel using ng-repeat, in vain...

I've read about the well known issue: here and here.

I tried to use the init-onload and data attributes, in vain...

HTML:

<div ng-controller="LandingCtrl as ctrl">

...

<slick init-onload=true data="ctrl.products">
    <div ng-repeat="product in ctrl.products"><img src="{{product.image}}" alt="{{product.title}}"></div>
</slick>

...

</div>

JS :

angular.module('myApp')
  .controller('LandingCtrl',['$http', function($http){

    var store = this;
    store.products = [];
    $http.get('products.json')
    .success(function(data){
      store.products = data;
      console.log(data); //display the json array
    });

}]);

(myApp module is defined in my app.js file, I used yeoman to scaffold my project)

It would be great if you could help me.


Solution

  • I'd suggest you to use ng-if on slick element. That will only load slick directive only when data is present just by checking length of data.

    Markup

    <slick ng-if="ctrl.products.length">
        <div ng-repeat="product in ctrl.products">
           <img ng-src="{{product.image}}" alt="{{product.title}}"/>
        </div>
    </slick>