Angular15调用导入类方法时出现Cannot read properties of undefined错误
Angular 15 中 CryptoJS 未定义问题排查
先给结论:构造函数触发调用不是直接原因
构造函数里间接触发调用本身不会让 CryptoJS 变成 undefined,问题大概率出在导入方式或者依赖加载环节。
最可能的问题:导入方式错误
crypto-js 的导出结构是默认导出,而非命名导出,你当前用的 import { CryptoJS } from 'crypto-js' 无法正确获取到目标对象,自然会出现 undefined 报错。改成以下导入方式即可:
import CryptoJS from 'crypto-js';
其他排查方向
- 检查依赖完整性:执行
npm list crypto-js确认依赖是否存在,若缺失或版本异常,重新安装:npm install crypto-js --save。 - 调整初始化时机:如果
AuthenticationService在模块中被过早初始化(比如在 APP_INITIALIZER 之前),可能导致 CryptoJS 未加载完成就被调用。可以把setCookies的触发逻辑从构造函数移到组件的ngOnInit生命周期钩子中。 - 验证导入有效性:在
AuthenticationService顶部添加console.log(CryptoJS),若输出 undefined,说明导入问题;若输出正常对象,再排查是否有其他代码意外覆盖了 CryptoJS。
修复后代码示例
// 替换原导入语句 import CryptoJS from 'crypto-js'; // 在 setCookies 方法中正常调用 const hmacResult = CryptoJS.HmacSHA1(currentUser, '你的密钥').toString();
内容的提问来源于stack exchange,提问作者Geoff Alexander
相关产品推荐
相关产品推荐

