
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 将正常渲染图片列表。










