
angular 项目中通过 *ngfor 渲染图片时空白无显示,通常是因图片路径包含冗余的 `src/` 前缀导致资源加载失败;正确路径应以 `assets/` 开头,由 angular 构建系统自动映射至 `src/assets` 目录。
在 Angular 应用中,静态资源(如图片、字体、JSON 文件)应统一存放于 src/assets/ 目录下,而 Angular CLI 在构建时会将整个 assets 文件夹原样复制到输出目录(如 dist/your-app/assets/),并默认将其配置为静态资源根路径。这意味着:所有以 assets/ 开头的路径,浏览器会直接从应用根路径请求对应资源,无需也不应添加 src/ 前缀。
你当前的代码中,BookService.getAll() 返回的路径为:
return [ 'src/assets/images/books/book-1.jpg', 'src/assets/images/books/book-1.jpg', 'src/assets/images/books/book-1.jpg', ];
该路径会被拼接到 中,最终浏览器尝试请求类似 http://localhost:4200/src/assets/images/books/book-1.jpg 的地址——但该路径在生产构建后并不存在(src/ 是开发源码目录,不会发布到服务器),因此图片 404,列表呈现为空白。
✅ 正确做法是:移除 src/,仅保留 assets/ 及其子路径。修改 BookService 如下:
export class BookService {
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 风险),也支持延迟加载与错误处理:
并在组件中补充容错逻辑(可选):
onImageError(event: Event) {
const img = event.target as HTMLImageElement;
img.src = 'assets/images/placeholder.png'; // 提供备用占位图
}⚠️ 注意事项:
- 确保 assets/images/books/ 目录真实存在于 src/ 下,且图片文件已正确放置;
- 路径区分大小写(尤其在 Linux/macOS 构建环境中);
- 若使用 angular.json 自定义了 assets 配置,请确认其包含 src/assets 或对应子目录;
- 不要使用绝对路径如 /assets/...(除非部署在根路径),否则可能因子目录部署(如 https://example.com/my-app/)导致 404;相对路径 assets/... 由 Angular 自动适配。
通过修正路径前缀并采用标准绑定方式,图片即可正常加载,*ngFor 列表也将按预期渲染完整图像序列。










