Ít đến bữa tiệc, mặc dù tôi đã đưa ra một giải pháp cho ít nhiều vấn đề tương tự trong một hệ thống tôi đang xây dựng.
Tuy nhiên, ý tưởng của tôi là xử lý MỌI img
thẻ hình ảnh trên toàn cầu.
Tôi không muốn phải tiêu hóa HTML
những chỉ thị không cần thiết, chẳng hạn như err-src
những chỉ thị được trình bày ở đây. Rất thường xuyên, đặc biệt là với các hình ảnh động, bạn sẽ không biết nếu nó bị mất cho đến khi quá muộn. Thêm các chỉ thị bổ sung vào cơ hội không có hình ảnh có vẻ quá mức đối với tôi.
Thay vào đó, tôi mở rộng img
thẻ hiện có - thực sự là những gì mà các chỉ thị của Angular hướng tới.
Vì vậy - đây là những gì tôi nghĩ ra.
Lưu ý : Điều này đòi hỏi phải có thư viện JQuery đầy đủ và không chỉ các tàu Angular JQlite vì chúng tôi đang sử dụng.error()
Bạn có thể thấy nó hoạt động tại Plunker này
Lệnh này trông khá giống như thế này:
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');
});
}
}
});
Khi xảy ra lỗi (nguyên nhân là do hình ảnh không tồn tại hoặc không thể truy cập được, v.v.), chúng tôi chụp và phản ứng. Bạn cũng có thể cố gắng để có được kích thước hình ảnh - nếu chúng có mặt trên hình ảnh / kiểu ở vị trí đầu tiên. Nếu không, sau đó đặt cho mình một mặc định.
Ví dụ này đang sử dụng placekeep.it cho một hình ảnh để hiển thị thay thế.
Bây giờ MỌI hình ảnh, bất kể sử dụng src
hay ng-src
tự bao phủ trong trường hợp không có gì tải lên ...