升級 Angular 破壞了我的一些代碼。以前,以下陳述句有效:
@Component({
templateUrl: './some.component.html',
styleUrls: ['./some.component.scss']
})
export class SomeComponent {
...
public someMethod(): void {
const defs = this.svg.select(function() {return this.parentNode; })
.append('defs');
...
}
...
}
現在這將引發以下兩條錯誤訊息:
'this' 隱含型別為 'any',因為它沒有型別注釋。
'this' 的外部值被此容器遮蔽。
這條線的正確替代品是什么?
uj5u.com熱心網友回復:
這個特定問題的解決方案實際上是多方面的:
- 升級使用的 ES 版本
- 升級 D3js
該陳述句可以翻譯為:
this.svg.select(function(this:any) {return this.parentNode;})
uj5u.com熱心網友回復:
您可以嘗試使用 ES5 箭頭函式。箭頭函式不會破壞或覆寫this。
public someMethod(): void {
const defs = this.svg.select(() => this.parentNode)
.append('defs');
...
}
如果這不能解決問題,請使用另一個變數從函式范圍回傳:
public someMethod(): void {
const myParentNode = this.parentNode;
const defs = this.svg.select(() => myParentNode)
.append('defs');
...
}
uj5u.com熱心網友回復:
public someMethod(): void {
const myParentNode = this.parentNode;
const defs = this.svg.select(myParentNode)
.append('defs');
}
或者更容易
public someMethod(): void {
d3.select('svg')
.append('defs');
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/506788.html
