Um pouco tarde para a festa, embora eu tenha encontrado uma solução para mais ou menos o mesmo problema em um sistema que estou construindo.
Minha idéia, porém, era lidar com TODAS as img
tags de imagem globalmente.
Eu não queria ter que apimentar minhas HTML
diretrizes desnecessárias, como err-src
as mostradas aqui. Frequentemente, especialmente com imagens dinâmicas, você não saberá se está faltando até que seja tarde demais. Adicionar diretivas extras à chance de uma imagem estar faltando parece um exagero para mim.
Em vez disso, estendo a img
tag existente - que é, na verdade, o que são as diretivas Angular.
Então - é isso que eu criei.
Nota : Isso requer que a biblioteca JQuery completa esteja presente e não apenas os JQlite Angular enviados porque estamos usando.error()
Você pode vê-lo em ação neste Plunker
A diretiva é mais ou menos assim:
app.directive('img', function () {
return {
restrict: 'E',
link: function (scope, element, attrs) {
// show an image-missing image
element.error(function () {
var w = element.width();
var h = element.height();
// using 20 here because it seems even a missing image will have ~18px width
// after this error function has been called
if (w <= 20) { w = 100; }
if (h <= 20) { h = 100; }
var url = 'http://placehold.it/' + w + 'x' + h + '/cccccc/ffffff&text=Oh No!';
element.prop('src', url);
element.css('border', 'double 3px #cccccc');
});
}
}
});
Quando ocorre um erro (o que ocorre porque a imagem não existe ou é inacessível etc.), capturamos e reagimos. Você pode tentar obter os tamanhos de imagem também - se eles estivessem presentes na imagem / estilo em primeiro lugar. Caso contrário, defina-se como padrão.
Este exemplo está usando placehold.it para que uma imagem seja exibida.
Agora, TODAS as imagens, independentemente do uso src
ou ng-src
se cobrem para o caso de nada carregar ...