升级Angular后代码因this指针遮蔽报错,求正确替换方案
解决方案
你的代码报错是因为升级Angular后TypeScript严格类型检查规则生效:普通回调函数里的this缺少类型注解,且外层组件实例的this被回调内的this遮蔽了。可以用以下两种方式修复:
方式一:为回调函数的this添加类型注解
直接给回调内的this指定DOM元素类型,让TypeScript明确其类型:
public someMethod(): void { const defs = this.svg.select(function(this: Element) { return this.parentNode; }).append('defs'); // ... }
方式二:使用回调参数获取当前元素(避免依赖this)
利用D3选择器回调的第三个参数(当前元素所在的节点数组)获取目标元素,彻底避开this的上下文歧义:
public someMethod(): void { const defs = this.svg.select((d, i, nodes) => { return nodes[i].parentNode; }).append('defs'); // ... }
两种写法都能解决报错问题,方式二更符合现代TypeScript编码习惯,也避免了this上下文混淆。
内容的提问来源于stack exchange,提问作者user2912328
相关产品推荐
相关产品推荐

