7

Ich habe die ganze Woche Ende versucht, Daten anzuzeigen, in dem glatten Winkel Karussell (die ich mit $http.get holen) ng-repeat verwendet wird, vergebens ...

I‘ Lesen Sie über das bekannte Problem: here und here.

Ich versuchte, die init-onload und data Attribute zu verwenden, vergeblich ...

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 Modul in meiner app.js-Datei definiert ist Ich benutzte yeoman, um mein Projekt zu rüsten)

Es wäre toll, wenn Sie mir helfen könnten.

+1

gut, glaube ich nicht, das wäre ganz richtig funktionieren, da 'init-onload' gemeint ist, zu warten, bis Sie eine Variable für' data' haben, aber Da Sie diese Variable mit einem leeren Array füllen, bevor Sie Ihre $ HTTP-Anfrage machen, wird Slick nicht wissen, dass sie warten soll. funktioniert es, wenn Sie die Zeile 'store.products = [];'? – Claies

+0

oder, verzögern Laden Slick, wie in der Antwort von @ PankajParkar – Claies

+0

Vielen Dank! Es funktioniert genauso gut wie die Methode des Pankaj Parkar. Dank euch beiden habe ich einen wichtigen Punkt verstanden. – user4820423

Antwort

15

Ich würde vorschlagen, dass Sie ng-if auf slick Element verwenden. Das lädt nur slick Direktive nur, wenn Daten vorhanden sind, nur durch Überprüfung der Länge der Daten.

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

Das ist wirklich genial. Ich habe nie gedacht, ng-ob zu diesem Zweck zu benutzen. Daran muss ich mich erinnern. – jme11

+0

@ jme11 Danke bro .. Es ist einfach toll, aber Sie müssen 'dot rule' folgen, während Sie dies verwenden –

+0

Vielen Dank! Es funktioniert so gut wie die Claies-Methode. Dank euch beiden habe ich einen wichtigen Punkt verstanden. – user4820423

1

I Standard Slick Karussell, nicht abgewinkelte Ausführung verwenden. Sie müssen nur warten, bis die Daten abgewinkelt sind. 1 Sekunde oder weniger ist ok Zum Beispiel

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