2016-02-05 14 views
5

Tôi đang cố gắng xây dựng một số logic vào api của mình để nó loại trừ các đối tượng có URL trong trường "hình ảnh" trả về 4xx, 5xx hoặc thời gian trên 4000 mili giây .

Mã bên dưới không hoạt động tốt vì nó vẫn cho phép hình ảnh 404 và trống.

Có ai có thể đề xuất cách sửa lỗi này không?

Ngoài ra, ở đây nó là một trong plunker- http://plnkr.co/edit/7ScnGyy2eAmGwcJ7XZ2Z?p=preview

Ví dụ về json: {id: 242, hình ảnh: "www.image.com/1.jpg", tên: "blah blah"}

.controller('CardsCtrl', ['$scope', '$http', '$state', '$q', '$ionicLoading', '$ionicModal', 'TDCardDelegate', 'cardsApi', '$http', '$timeout', '$element', 
    function($scope, $http, $state, $q, $ionicLoading, $ionicModal, TDCardDelegate, cardsApi, $http, $timeout, $element) { 


    var loginuid = window.localStorage.getItem('uid'); 
    console.log(loginuid); 


    var MIN_CARDS = 7; 

    console.log('CARDS CTRL'); 
    $scope.cards = []; 

    cardsApi.getApiData() 
     .then(function(result) { 
     console.log(result.data); //Shows log of API incoming 
     $scope.cards = result.data; 

     result.data.forEach(function(card) { 
      var imgurl = card.image; 
      console.log(imgurl); 
      var canceler = $q.defer(); 
      $http.get(imgurl, { 
       timeout: canceler.promise 
      }) 
      .then(function mySuccess(response) { 
       console.log(response.status); 

      }, function myError(response) { 
       console.log(response.status); 

       if (response.status == 404) { 
       $scope.cards.splice(card, 1); 
       } 
       // console.log('deleted'); 
       var imgpid = "#card-image-" + card.vari; 
       console.log(imgpid); 
       $(imgpid).parent().remove(); 
      }) 
      .catch(function(err) { 

      }); 
      $timeout(function() { 
      $ionicLoading.hide(); 
      canceler.resolve(); 
      }, 4000); 
     }); 

     }) 
+0

tạo ra một bộ nạp hình ảnh chỉ thị sử dụng tải hình ảnh gốc và gọi lại lỗi. Sẽ không chạy vào vấn đề CORS mà bạn sẽ sử dụng ajax – charlietfl

+0

Tôi không gặp phải vấn đề CORS (Tôi không nghĩ). Bạn có thể minh họa bằng một ví dụ không? – Ycon

+0

trong chỉ thị ... 'element.on ('tải', hàm (...' và 'element.on ('lỗi', func ...' – charlietfl

Trả lời

0

tôi đã thay đổi dòng này từ:

<img class="storelogo-image" ng-src="{{card.store__logo}}"> 

để

<img class="storelogo-image" ng-src="{{card.store__logo.indexOf('http://')> -1 ?card.store__logo :''}}"> 

Và nó hoạt động tốt.

0

The plunker

tôi thêm -<td-card ng-if="card.image" ng-repeat="card in cards" ...

này sẽ ngăn chặn các mẫu từ tạo ra và mẫu hình ảnh sản phẩm nào trong trường hợp không có hình ảnh có sẵn

+0

Trên suy nghĩ thứ hai, có thể có boolean cho biết liệu không phải hình ảnh được tải và ng-nếu trên boolean đó cho mỗi hình ảnh –

+0

Bạn có thể chỉ cho tôi một ví dụ với Boolean không? Các thay đổi của bạn không hoạt động (trong Plunker) – Ycon

+0

Tôi cập nhật [plunker] (http: // plnkr. co/edit/xz2HWsIwStwl6jpRSMpA? p = preview) Tôi đã thêm thuộc tính boolean vào mỗi thẻ trên 'getApiData()' với giá trị mặc định là false, sau đó, trên hàm thành công của lời hứa tôi đặt nó thành true. Sử dụng ng-show trên ng-lặp lại của bạn mẫu sẽ không được hiển thị cho đến khi hình ảnh đã được tải. Trong khi sử dụng ng-nếu mẫu không được hiển thị cho đến khi hình ảnh đã được tải xuống, tôi nghĩ rằng câu trả lời cho câu hỏi của bạn về tải. sử dụng giải pháp là một lựa chọn thiết kế. –

Các vấn đề liên quan