7

Tôi đã cố gắng tất cả cuối tuần để hiển thị dữ liệu (mà tôi lấy với $http.get) trong băng chuyền góc trơn sử dụng ng-repeat, trong vô vọng ...

tôi đã đọc về vấn đề nổi tiếng: herehere.

tôi cố gắng sử dụng init-onloaddata thuộc tính, vô ích ...

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 mô-đun được định nghĩa trong tập tin app.js của tôi , Tôi đã sử dụng yeoman để dàn dựng dự án của mình)

Sẽ rất tuyệt nếu bạn có thể giúp tôi.

+1

tốt, tôi không nghĩ rằng sẽ làm việc hoàn toàn đúng, vì 'init-onload' có nghĩa là để chờ đợi cho đến khi bạn có một biến cho 'dữ liệu', nhưng vì bạn điền trước biến đó với một mảng trống trước khi thực hiện yêu cầu '$ http' của bạn, slick sẽ không biết nó phải đợi. nó có hoạt động không nếu bạn xóa dòng 'store.products = [];'? – Claies

+0

hoặc, trì hoãn tải slick, như trong câu trả lời từ @PankajParkar – Claies

+0

Cảm ơn rất nhiều! Nó hoạt động cũng như phương pháp của Pankaj Parkar. Nhờ cả hai bạn, tôi đã hiểu một điểm quan trọng. – user4820423

Trả lời

15

Tôi khuyên bạn nên sử dụng ng-if trên phần tử slick. Điều đó sẽ chỉ tải slick chỉ thị khi dữ liệu có mặt chỉ bằng cách kiểm tra độ dài của dữ liệu.

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

Đó là thực sự awesomely thông minh. Tôi không bao giờ nghĩ dùng ng-if cho mục đích đó. Phải nhớ điều đó. – jme11

+0

@ jme11 Cảm ơn bro .. Nó chỉ tuyệt vời nhưng bạn cần phải làm theo 'dot rule' trong khi sử dụng này –

+0

Cảm ơn rất nhiều! Nó hoạt động cũng như phương pháp của Claies. Nhờ cả hai bạn, tôi đã hiểu một điểm quan trọng. – user4820423

1

tôi sử dụng băng chuyền trơn tiêu chuẩn, không phiên bản góc. Bạn chỉ cần đợi kết thúc góc tải dữ liệu. 1 giây hoặc ít hơn là ok Ví dụ

setTimeout(
     function() 
     { 
      $('#yourdiv').slick({ 
       autoplay: true 
      }) 
     }, 1000); 
Các vấn đề liên quan