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

Angular页面首次加载触发TypeError,贴纸预览组件报错如何修复?

问题原因

页面首次加载时,父组件还未给previewStickerData赋值(用户未点击元素),此时传入StickerPreviewComponent的StickerData为空对象/未定义。你的set StickerData方法直接访问this._stickerData.StickerData,当_stickerData为空或不存在StickerData属性时,就会抛出空指针错误,后续点击元素赋值后功能正常,所以代码不会崩溃但会持续弹窗报错。

另外注意你组件ngOnInit中调用接口重新赋值_stickerData的逻辑,会覆盖父组件传入的选中元素数据,属于冗余冲突逻辑,建议删除。

修复方案(任选其一即可,推荐前两种组合使用)

方案1:setter内增加空值判断

修改StickerPreviewComponent的set StickerData逻辑,使用可选链做空值保护:

@Input()
set StickerData(prm: IStickerData) {
  if (this._stickerData != prm) {
    this._stickerData = prm;
  }
  // 仅当_stickerData存在StickerData属性时才拼接url,否则赋值为空字符串
  this.url = this._stickerData?.StickerData ? "http://api.labelary.com/v1/printers/8dpmm/labels/4x6/0/" + this._stickerData.StickerData : '';
}

方案2:父组件延迟渲染子组件

修改父组件模板,仅当previewStickerData有值时才加载sticker-preview组件:

<fuse-sidebar class="sidebar centra details-sidebar fuse-white" name="sticker-preview-sidebar" position="right">
    <sticker-preview *ngIf="previewStickerData" [StickerData]="previewStickerData"></sticker-preview>
</fuse-sidebar>

方案3:给_stickerData补充初始值

修改_stickerData的初始声明,默认补全StickerData属性:

public _stickerData: IStickerData = {
    StickerData: ''
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 02:36:08