7

ho cercato tutto il week end per visualizzare i dati (che vado a prendere con $http.get) nel carosello angolare chiazza di petrolio utilizzando ng-repeat, invano ...

I' Ho letto sul noto problema: here e here.

ho cercato di utilizzare gli attributi init-onload e data, invano ...

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 modulo è definito nel mio file app.js , Ho usato yeoman per impalcatura il mio progetto)

Sarebbe bello se potessi aiutarmi.

+1

bene, non penso che avrebbe funzionato perfettamente ragione, dal momento che 'init-onload' ha lo scopo di aspettare fino a quando si dispone di una variabile per' data', ma dal momento che precompilate quella variabile con una matrice vuota prima di effettuare la vostra richiesta '$ http', la slick non saprà che si suppone che aspetti. funziona se si rimuove la riga 'store.products = [];'? – Claies

+0

o, ritardare il caricamento chiazza di petrolio, come nella risposta di @PankajParkar – Claies

+0

Grazie mille! Funziona bene come il metodo di Pankaj Parkar. Grazie ad entrambi, ho capito un punto importante. – user4820423

risposta

15

Ti suggerisco di utilizzare ng-if sull'elemento slick. Questo caricherà solo la direttiva slick solo quando i dati sono presenti semplicemente controllando la lunghezza dei dati.

Markup

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

Questo è davvero incredibilmente intelligente. Non ho mai pensato di usare ng-se per quello scopo. Devo ricordarlo. – jme11

+0

@ jme11 Grazie fratello .. È semplicemente fantastico, ma devi seguire la "regola dei punti" mentre usi questo –

+0

Grazie mille! Funziona bene come il metodo di Claies. Grazie ad entrambi, ho capito un punto importante. – user4820423

1

Io uso carosello chiazza di petrolio standard, non la versione angolare. Devi solo aspettare la finitura angolare per caricare i dati. 1 secondo o meno è ok Per esempio

setTimeout(
     function() 
     { 
      $('#yourdiv').slick({ 
       autoplay: true 
      }) 
     }, 1000);