Angular运行时报错:Cannot read properties of undefined (reading 'getContext')
问题产生原因
- 报错本质是脚本尝试对不存在的DOM元素调用
getContext方法:AdminLTE自带的dashboard2.js是其官方示例仪表盘页面的配套脚本,内部默认会读取页面上预设ID的canvas元素用于渲染图表,你当前的Angular页面没有插入这些对应的canvas节点,脚本执行时就会因为获取到的元素为undefined触发报错。 - 清空
node_modules下的dashboard2.js后报错转移到scripts.js,是因为你在angular.json的scripts配置中引入了该文件,Angular打包时会把所有配置的全局脚本合并打包到scripts.js中,直接修改node_modules内的源文件属于临时修改,要么重新打包后才会生效,要么重装依赖就会被还原,本身就不是合理的修改方式。
解决办法
- 如果你不需要使用AdminLTE自带的仪表盘图表功能:直接打开
angular.json,找到architect > build > options > scripts配置项,移除其中对admin-lte/dist/js/pages/dashboard2.js的引入即可,不需要修改node_modules内的文件。 - 如果你需要使用AdminLTE的仪表盘图表功能:不要全局引入
dashboard2.js,在你对应仪表盘页面的Angular组件中,在ngAfterViewInit生命周期钩子(此时页面DOM已经渲染完成)中,先确保你已经在组件模板中插入了对应ID的canvas元素,再手动执行图表初始化逻辑即可。 - 额外建议:不要全局引入AdminLTE所有页面的示例脚本,只引入你需要的核心功能脚本
admin-lte/dist/js/adminlte.min.js即可,避免其他不需要的示例脚本触发类似的DOM不存在报错。
内容的提问来源于stack exchange,提问作者Alam
相关产品推荐
相关产品推荐

