L'application que je suis en train de créer nécessite que mon utilisateur définisse 4 informations avant même que cette image ait une chance de se charger. Cette image est la pièce maîtresse de l'application, donc le lien d'image rompu donne l'impression que tout est bouché. J'aimerais qu'une autre image prenne sa place sur une 404.
Des idées? Je voudrais éviter d'écrire une directive personnalisée pour cela.
J'ai été surpris de ne pas pouvoir trouver une question similaire, surtout lorsque la première question dans la documentation est la même!
angularjs
angularjs-directive
will_hardin
la source
la source
Réponses:
C'est une directive assez simple pour surveiller une erreur lors du chargement d'une image et pour remplacer le src. (Plunker)
Html:
Javascript:
Si vous souhaitez afficher l'image d'erreur lorsque ngSrc est vide, vous pouvez ajouter ceci (Plunker) :
Le problème est que ngSrc ne met pas à jour l'attribut src si la valeur est vide.
la source
src
attribut pour l'err-src
image: plnkr.co/edit/b05WtghBOHkxKdttZ8q5Un peu tard à la fête, même si j'ai trouvé une solution à plus ou moins le même problème dans un système que je construis.
Mon idée était, cependant, de gérer CHAQUE
img
balise d' image à l'échelle mondiale.Je ne voulais pas avoir à poivrer mon
HTML
avec des directives inutiles, commeerr-src
celles montrées ici. Très souvent, en particulier avec des images dynamiques, vous ne saurez pas s'il manque jusqu'à ce qu'il soit trop tard. Ajouter des directives supplémentaires au cas où une image serait manquante me semble exagéré.Au lieu de cela, j'étends la
img
balise existante - ce qui, vraiment, est ce que sont les directives angulaires.Donc - c'est ce que j'ai trouvé.
Remarque : Cela nécessite que la bibliothèque JQuery complète soit présente et pas seulement le JQlite Angular livré avec car nous utilisons
.error()
Vous pouvez le voir en action sur ce Plunker
La directive ressemble à peu près à ceci:
Lorsqu'une erreur se produit (qui sera parce que l'image n'existe pas ou est inaccessible, etc.) nous captons et réagissons. Vous pouvez également essayer d'obtenir les tailles d'image - si elles étaient présentes sur l'image / le style en premier lieu. Sinon, définissez-vous une valeur par défaut.
Cet exemple utilise placehold.it pour afficher une image à la place.
Maintenant, CHAQUE image, indépendamment de l'utilisation
src
oung-src
se couvre au cas où rien ne se charge ...la source
Pour étendre la solution Jason pour attraper les deux cas d'erreur de chargement ou de chaîne source vide, nous pouvons simplement ajouter une montre.
Html:
Javascript:
la source
ng-if
dans le modèle (la chaîne src vide)attrs.$observe('ngSrc', function(value) {...});
, c'est ce que ngSrc utilise en interne au lieu de $ watchen HTML:
la source
Si l'image vaut 404 ou si l'image est nulle vide quoi qu'il en soit, vous n'avez pas besoin de directives, vous pouvez simplement utiliser le filtre ng-src comme ceci :)
la source
J'utilise quelque chose comme ça, mais cela suppose que team.logo est valide. Il force la valeur par défaut si "team.logo" n'est pas défini ou est vide.
la source
Vous n'avez pas besoin d'angular pour cela, ni même de CSS ou de JS. Si vous le souhaitez, vous pouvez envelopper cette réponse (liée) dans une directive simple pour la rendre plus simple, comme ou quelque chose du genre, mais c'est un processus assez simple ... enveloppez-la simplement dans une balise objet ...
Comment masquer l'icône d'image cassée en utilisant uniquement CSS / HTML (sans js)
la source
Existe-t-il une raison spécifique pour laquelle vous ne pouvez pas déclarer l'image de secours dans votre code?
Si je comprends bien, vous avez deux cas possibles pour votre source d'image:
Je pense que cela devrait être géré par votre application - si l'URL correcte ne peut pas être déterminée actuellement, passez plutôt une URL d'image de chargement / de secours / d'espace réservé.
Le raisonnement est que vous n'avez jamais d'image «manquante», car vous avez explicitement déclaré l'URL correcte à afficher à tout moment.
la source
Je suggère que vous aimeriez peut-être utiliser la directive «if statement» Angular UI Utils pour résoudre votre problème, comme indiqué sur http://angular-ui.github.io/ . Je viens de l'utiliser pour faire exactement la même chose.
Ceci n'est pas testé, mais vous pouvez faire quelque chose comme:
Code contrôleur:
(ou plus simple)
HTML dans la vue:
<img ui-if="showImage()" ng-src="images/{{data.value}}.jpg" />
Ou encore plus simple, vous pouvez simplement utiliser une propriété scope:
Code contrôleur:
HTML dans la vue:
<img ui-if="showImage" ng-src="images/{{data.value}}.jpg" />
Pour une image d'espace réservé, ajoutez simplement une autre
<img>
balise similaire, mais ajoutez votreui-if
paramètre avec un point d'exclamation (!
), et faites soit que ngSrc ait le chemin vers l'image d'espace réservé, soit utilisez simplement unesrc
balise selon le vieux HTML normal.par exemple.
<img ui-if="!showImage" src="images/placeholder.jpg" />
De toute évidence, tous les exemples de code ci-dessus supposent que chacune des valeurs valeur1, valeur2, valeur3 et valeur4 équivaudra à
null
/false
quand chacune de vos 4 informations est incomplète (et donc aussi à une valeur booléenne detrue
quand elles sont complètes).PS. Le projet AngularUI a récemment été divisé en sous-projets, et la documentation pour
ui-if
semble manquer actuellement (elle est probablement dans le package quelque part cependant). Cependant, il est assez simple à utiliser comme vous pouvez le voir, et j'ai enregistré un `` problème '' de Github sur le projet Angular UI pour le signaler également à l'équipe.MISE À JOUR: 'ui-if' est absent du projet AngularUI car il a été intégré au code AngularJS de base! Seulement à partir de la v1.1.x, qui est actuellement marquée comme «instable».
la source
ng-if
en a fait le noyau btw (à partir de 1.1.5 si je ne me trompe pas).Voici une solution que j'ai trouvée en utilisant javascript natif. Je vérifie si l'image est cassée, puis j'ajoute une classe à l'image au cas où et en changeant la source.
J'ai obtenu une partie de ma réponse d'une réponse Quora http://www.quora.com/How-do-I-use-JavaScript-to-find-if-an-image-is-broken
la source
Je suis venu avec ma propre solution. Il remplace l'image à la fois si src ou ngSrc est vide et si img renvoie 404.
(fourchette de la solution @Darren)
la source
Cela ne permettra que de faire une boucle deux fois, pour vérifier si le ng-src n'existe pas sinon utilisez le err-src, cela empêche la boucle continue.
la source