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.
Angular-JS ng-repeat Directive Last Updated : 09 Aug, 2019 Angular-JS ng-repeat directive is a handy tool to repeat a set of HTML code for a number of times or once per item in a collection of items. ng-repeat is mostly used on arrays and objects.
Modern browsers support two different APIs for making HTTP requests: the XMLHttpRequest interface and the fetch () API. The HttpClient in @angular/common/ http offers a simplified client HTTP API for Angular applications that rests on the XMLHttpRequest interface exposed by browsers.
Angular provides a client HTTP API for Angular applications, the HttpClient service class in @angular/common/ http. The HTTP client service offers the following major features. The ability to request typed response objects.
This directive allows you to use the slick-carousel plugin as an angular directive. It can be specified in your HTML as either a <div> attribute or a <slick> element. settings: optional Object containing any of the slick options. Consult here. enabled should slick be enabled or not. Default to true. Example below
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>
I use standard slick carousel, not angular version. You just have to wait for angular finish loading the data. 1 second or less is ok For example
setTimeout(
function()
{
$('#yourdiv').slick({
autoplay: true
})
}, 1000);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With