Goal :使用动态源加载图像 . 如果未找到图像,则改为加载占位符图像 .
这应该说明我正在尝试做什么,但我不知道如何根据第一个img src是否有效来有条件地设置validImage .
<img *ngif="validImage" class="thumbnail-image" src="./app/assets/images/{{image.ID}}.jpg" alt="...">
<img *ngif="!validImage" class="thumbnail-image" src="./app/assets/images/placeholder.jpg" alt="...">
如果src =“./ app / assets / images / {},则validImage应为true.jpg”返回图像 . 否则它将返回false并且只显示第二个img标记 .
有明显的工作方法,比如存储所有有效图像源的列表,但我认为有更好的方法来实现这一点 .
关于在Angular2中实现此方法的最佳方法的任何建议将不胜感激 .
8 回答
处理损坏的图像链接的最佳方法是使用
onError
事件作为<img>
标记:我遇到了类似的需求 . 如果img url为null或返回错误(404等),我想默认为1X1透明像素 .
在组件类的某个地方:
我创建了一个自定义组件,如果图像仍未加载或加载时发生错误,则使用占位符图像:
img.component.ts:
img.component.html:
然后你就可以使用它:
PS:我事先验证图像是否被高速缓存以避免图像闪烁(通常是当内部图像被重新渲染的组件重新渲染时)占位符和图像之间(如果它被缓存,我甚至在加载之前显示图像flag设置为true) . 您可以取消注释
isCached
函数中的日志,以查看您的图像是否已缓存 .纯CSS有一种非Angular2方式:Styling Broken Images
但请注意文章中的浏览器支持指标 .
我这样做了:
在我的HTML文件中写了这个
我调用了一个在我的component.ts中的函数,并将该对象传递给我的url作为参数
继承我的功能,首先我验证对象图像url是否与null不同,如果为true则返回图像url否则我返回我的app资产中的默认"noFound"图像 .
希望能帮助到你!