
angular 中通过 *ngfor 动态渲染图片时,若图片路径包含 `src/` 前缀会导致 404 加载失败;应使用相对路径 `assets/images/…`,因 angular 的 `assets` 目录默认映射到 `src/assets`,浏览器直接从根路径访问该目录。
在 Angular 应用中,静态资源(如图片、字体、jsON 文件)通常放在 src/assets/ 目录下,并由 Angular CLI 自动复制到构建输出的根目录(即 dist/your-app/ 下的 assets/ 文件夹)。因此,浏览器请求图片时,路径必须以 /assets/ 开头(或省略开头斜杠,写作 assets/…),而不能以 src/assets/ 开头——因为 src/ 是开发阶段的源码目录,不会出现在最终部署的网页运行环境中。
你当前的代码中,BookService.getAll() 返回了带 src/ 前缀的路径:
return [ 'src/assets/images/books/book-1.jpg', // ... ];
这会导致浏览器实际发起类似 http://localhost:4200/src/assets/images/books/book-1.jpg 的请求,而该路径并不存在,因此所有 标签均无法加载,显示为空白或占位符。
✅ 正确做法是:移除 src/,仅保留 assets/ 开头的路径:
// BookService.ts getAll(): string[] { return [ 'assets/images/books/book-1.jpg', 'assets/images/books/book-2.jpg', 'assets/images/books/book-3.jpg' ]; }
同时,模板中建议使用 Angular 推荐的属性绑定语法 [src] 替代插值 {{read}},既更安全(避免 xss 风险),也支持动态路径解析:
⚠️ 注意事项:
- 确保 src/assets/images/books/ 目录真实存在,且图片文件已正确放入;
- 检查浏览器开发者工具(F12 → Network 标签页),查看图片请求是否返回 404;若仍失败,请确认路径拼写、大小写(linux/服务器区分大小写)及文件扩展名(如 .jpg vs .jpeg);
- 不要使用绝对路径 src/assets/… 或 ./src/assets/… ——这些对运行时无效;
- 如需支持延迟加载或错误兜底,可结合 (Error) 事件或 ngClass 添加 fallback 样式。
总结:Angular 的 assets 是构建时配置的公共资源入口,所有静态资源引用必须基于 assets/ 路径,而非源码路径 src/assets/。修正路径后,*ngFor 将正常渲染图片列表。