2016-02-05 10 views
5

Sto provando a creare una logica nella mia api in modo da escludere oggetti che hanno un URL nel campo "immagine" che restituisce un 4xx, 5xx, o timeout su 4000 ms .

Il codice seguente non funziona, in quanto consente ancora di visualizzare 404 e immagini vuote.

Qualcuno può suggerire come risolvere questo problema?

Inoltre, qui è in una plunker- http://plnkr.co/edit/7ScnGyy2eAmGwcJ7XZ2Z?p=preview

Esempio di JSON: {id: 242, immagine: "www.image.com/1.jpg", il nome: "bla bla"}

.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

crea un caricatore di immagini direttiva che utilizza il caricamento dell'immagine nativo e le callback degli errori. Non incontrerò problemi CORS che userete ajax – charlietfl

+0

Non ho riscontrato problemi CORS (non penso). Potresti illustrare con un esempio? – Ycon

+0

nella direttiva ... 'element.on ('load', function (...' e 'element.on ('error', func ...' – charlietfl

risposta

0

ho cambiato questa linea da:

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

a

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

E funziona bene.

0

The plunker

ho aggiunto a <td-card ng-if="card.image" ng-repeat="card in cards" ...

Ciò impedirà il modello da generare e modello immagine vuota nel caso in cui non v'è alcuna immagine disponibile

+0

In un secondo momento, potrebbe avere un valore booleano che indica se o non l'immagine caricata e ng-se su quello booleano per immagine –

+0

Puoi mostrarmi un esempio con il booleano? Le tue modifiche non funzionavano (nel Plunker) – Ycon

+0

Ho aggiornato [il plunker] (http: // plnkr. co/edit/xz2HWsIwStwl6jpRSMpA? p = anteprima). Ho aggiunto la proprietà booleana a ogni scheda su 'getApiData()' con il valore predefinito false. Quindi, sulla funzione di successo della promessa, l'ho impostato su true. utilizzando ng-show sulla tua ng-repeat il modello non verrà mostrato fino a quando l'immagine non sarà caricata.Utilizzando ng-se il modello non viene renderizzato fino a quando l'immagine non è stata caricata.Penso che questo risponda alla tua domanda sul caricamento. usare la soluzione è una scelta di design –