Angular 14中xterm.js调用fitAddon.fit()抛出ERROR Error: This API only accepts integers错误求助
Angular 14中xterm.js调用fitAddon.fit()抛出ERROR Error: This API only accepts integers错误求助
嘿,我来帮你排查这个问题!这个错误一般是因为fit()方法在获取终端容器尺寸时拿到了非整数值,而旧版本的xterm-fit插件对这个很严格,必须要求整数像素。结合你的代码和环境,给你几个针对性的解决方案:
1. 先修正代码里的拼写错误
你写的ngAfterViewInint少了一个字母i,正确的应该是ngAfterViewInit!这个拼写错误可能会导致这个生命周期方法没有按预期执行,间接引发尺寸计算的问题,先把这个改过来再说。
2. 确保终端容器有明确的整数尺寸
检查你的terminalWrapper对应的DOM元素的CSS样式,避免因为百分比、flex布局或者其他原因导致容器的宽高是小数像素。比如给它设置固定的整数尺寸:
/* 假设你的容器类名叫terminal-wrapper */ .terminal-wrapper { width: 800px; height: 600px; overflow: hidden; /* 避免滚动条影响尺寸计算 */ }
如果要用百分比布局,确保父容器的尺寸是整数,这样子容器的百分比计算后也会是整数。
3. 延迟调用fit()方法,确保DOM完全渲染
有时候Angular的ngAfterViewInit执行时,DOM元素的尺寸还没完全确定,这时候调用fit()就会拿到不稳定的尺寸值。可以加个短暂的延迟:
ngAfterViewInit() { this.terminal?.open(this.terminalWrapper.nativeElement); // 延迟100ms再调用fit,给DOM足够的渲染时间 setTimeout(() => { this.fitAddon?.fit(); }, 100); this.terminal.writeln('enter something in web-ssh-shell \n \r'); }
4. 升级xterm和fit插件的版本
你用的xterm@4.4.0和xterm-addon-fit@0.3.0都是比较旧的版本,这个非整数尺寸的问题在后续版本里已经被修复了。你可以升级到和Angular14兼容的新版本,比如:
npm install xterm@4.19.0 xterm-addon-fit@0.8.0 --save
新版本对尺寸的兼容性更好,不会因为小数像素就抛出错误。
你可以按顺序试这些方法,先从拼写错误和容器样式开始,一般就能解决问题啦!
备注:内容来源于stack exchange,提问作者cha1nsaw
相关产品推荐
相关产品推荐

