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

使用TypeScript设置图片src时出现Cannot set property未定义错误求助

解决"Cannot set property 'other_user_image' of undefined"报错

这个报错我之前在Angular项目里踩过坑!本质就是你尝试给一个未定义的对象的other_user_image属性赋值,所以才会抛出这个错误。结合你给的HTML代码(用了Angular的插值语法{{other_user_image}}),我整理了几种最常见的原因和解决办法:

1. 嵌套对象未提前初始化

如果你是把other_user_image放在某个对象里(比如userInfo.other_user_image),但没先初始化这个对象,就会报错:

错误示例

export class ChatPanelComponent {
  // 只声明了类型,但没初始化对象
  userInfo: { other_user_image?: string };

  loadUserAvatar() {
    // 异步请求获取图片URL
    getUserAvatar().then(url => {
      // 这里userInfo还是undefined,所以无法设置它的属性
      this.userInfo.other_user_image = url;
    });
  }
}

解决办法

提前初始化对象,给它一个默认值:

export class ChatPanelComponent {
  // 初始化空对象,确保属性有地方可存
  userInfo: { other_user_image: string } = { other_user_image: '' };

  loadUserAvatar() {
    getUserAvatar().then(url => {
      this.userInfo.other_user_image = url;
    });
  }
}

同时记得把HTML里的插值改成对应对象的属性:

<img class="media-box-object img-circle thumb32" src="{{userInfo.other_user_image}}" alt="Image" />

2. 异步回调里的this作用域错了

如果你的赋值操作在Promise、setTimeout这类异步回调中,用普通函数会导致this指向不是组件实例:

错误示例

loadUserAvatar() {
  fetch('/api/user/avatar')
    .then(function(res) { return res.json(); })
    .then(function(data) {
      // 这里的this不是组件实例,而是回调函数自身,所以this.other_user_image不存在
      this.other_user_image = data.imageUrl;
    });
}

解决办法

用箭头函数(箭头函数会继承外层作用域的this):

loadUserAvatar() {
  fetch('/api/user/avatar')
    .then(res => res.json())
    .then(data => {
      // 这里的this就是组件实例了
      this.other_user_image = data.imageUrl;
    });
}

或者提前保存this的引用(老版本JS常用写法):

loadUserAvatar() {
  const that = this;
  fetch('/api/user/avatar')
    .then(function(res) { return res.json(); })
    .then(function(data) {
      that.other_user_image = data.imageUrl;
    });
}

3. 组件属性未声明/初始化

如果你直接在组件里用this.other_user_image,但没提前声明这个属性,也会导致问题:

正确写法

export class ChatPanelComponent {
  // 声明并初始化属性,避免undefined
  other_user_image: string = '';

  async loadUserAvatar() {
    try {
      const response = await fetch('/api/user/avatar');
      const data = await response.json();
      this.other_user_image = data.imageUrl;
    } catch (err) {
      console.error('加载头像失败:', err);
    }
  }
}

最后再排查下:确保你是在给组件实例的属性赋值,而不是某个未定义的对象。如果还是有问题,可以把你的TypeScript函数代码贴出来,能更精准定位!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:22:38