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

Angular项目本地localhost运行正常 部署GitHub Pages添加功能报错

Angular待办清单部署GitHub Pages后添加功能失效问题

问题现象

  • 本地localhost环境运行支持刷新数据持久化的Angular待办清单应用时,添加条目功能正常,新增条目可正常展示在添加按钮下方
  • 项目部署到GitHub Pages后,点击添加按钮无任何响应
  • 相关地址:

控制台报错

触发错误时浏览器控制台输出如下:

ERROR TypeError: Cannot read properties of null (reading 'push')
    at e.addTodo (main.2beb7ccacdd609b1.js:1:139904)
    at main.2beb7ccacdd609b1.js:1:140617
    at Qh (main.2beb7ccacdd609b1.js:1:60440)
    at i (main.2beb7ccacdd609b1.js:1:60625)
    at HTMLFormElement.<anonymous> (main.2beb7ccacdd609b1.js:1:107043)
    at v.invokeTask (polyfills.a66b249bad4eb06b.js:1:7168)
    at Object.onInvokeTask (main.2beb7ccacdd609b1.js:1:82284)
    at v.invokeTask (polyfills.a66b249bad4eb06b.js:1:7089)
    at M.runTask (polyfills.a66b249bad4eb06b.js:1:2563)
    at m.invokeTask [as invoke] (polyfills.a66b249bad4eb06b.js:1:8219)

错误提示addTodo方法中尝试读取null值的push属性。

根因分析

报错的核心原因是待办列表变量初始化时缺失空值兜底:

  • localStorage数据按源(协议+域名+端口)隔离,本地localhost环境和GitHub Pages线上环境属于完全独立的存储空间
  • 本地调试时,浏览器localStorage中已经存入了合法的待办列表数组数据,初始化读取时能拿到有效值,因此push操作正常
  • 首次访问GitHub Pages线上地址时,对应存储key不存在,localStorage.getItem()返回null,经过JSON.parse(null)处理后得到null值,直接赋值给待办列表变量,后续执行push操作时就会触发空值报错。

修复方法

找到项目中从localStorage读取数据初始化待办列表的代码,增加空值兜底逻辑,保证待办列表变量初始化后始终为数组类型:

// 原错误写法(无兜底,读取到null时会导致后续push报错)
todos: Todo[] = JSON.parse(localStorage.getItem('todos'));

// 基础修复:无存储数据时默认初始化为空数组
todos: Todo[] = JSON.parse(localStorage.getItem('todos') || '[]');

如果要兼容localStorage被意外写入非数组格式数据的场景,可以增加类型校验:

const storedData = localStorage.getItem('todos');
let todos: Todo[] = [];
if (storedData) {
  const parsed = JSON.parse(storedData);
  todos = Array.isArray(parsed) ? parsed : [];
}

修改完成后重新执行打包命令,将生成的产物重新部署到GitHub Pages即可恢复功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 21:27:25