You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular模板字符串插值失效:默认图片显示异常问题

解决Angular模板中图片路径插值不生效问题

问题场景

我希望酒店无图片时显示默认图片,但当前Angular模板里的字符串插值未生效,cdn变量无法解析为实际路径。

现有代码

hotel.component.html

<img [src]="hotel.image!='' ? '{{cdn}}/{{hotel.image}}.jpg' : '{{cdn}}/images/no-image.png'">

hotel.component.ts

...
export class HotelsComponent {
  hotel!: HotelViewModel;
  cdn!:string;

  ngOnInit(): void {
    this.cdn='http://cdn.example.com';
  }
 }

当前输出

<img src="{{cdn}}/images/no-image.png">

期望输出

<img src="http://cdn.example.com/images/no-image.png">

问题原因

属性绑定[src]的表达式内部嵌套了字符串插值{{}},Angular在处理属性绑定表达式时,不会二次解析内部的插值语法,导致{{cdn}}被当作纯字符串输出,没有替换为变量值。

解决方案

方法1:直接在表达式中拼接字符串

移除插值语法,使用ES6模板字符串或普通字符串拼接的方式组合路径,Angular会直接解析表达式中的变量:

<!-- 使用模板字符串 -->
<img [src]="hotel.image !== '' ? `${cdn}/${hotel.image}.jpg` : `${cdn}/images/no-image.png`">

或用+拼接:

<!-- 使用普通字符串拼接 -->
<img [src]="hotel.image !== '' ? cdn + '/' + hotel.image + '.jpg' : cdn + '/images/no-image.png'">

方法2:将路径逻辑移至组件类

把路径拼接逻辑封装到组件的方法中,模板直接调用该方法获取图片路径,让模板更简洁,逻辑更集中:

修改hotel.component.ts

...
export class HotelsComponent {
  hotel!: HotelViewModel;
  cdn!:string;

  ngOnInit(): void {
    this.cdn='http://cdn.example.com';
  }

  getHotelImageUrl(): string {
    return this.hotel.image !== '' 
      ? `${this.cdn}/${this.hotel.image}.jpg` 
      : `${this.cdn}/images/no-image.png`;
  }
 }

修改hotel.component.html

<img [src]="getHotelImageUrl()">

内容的提问来源于stack exchange,提问作者MB_18

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 04:12:13