我在网格中有一列,当我单击该列时,我试图访问某种类的方法,但是this
上下文已更改并且不可用。
例如-
export class PreTflGridComponent implements OnInit {
columnDefs = [
{onCellClicked: this.editCellClicked}
];
constructor() { }
method(): void {
console.log('working');
}
editCellClicked(params) {
this.method();
}
}
错误:
ERROR TypeError: this.method is not a function
this
上下文更改后,如何访问方法/属性。
请参阅下面的确切问题 https://stackblitz.com/edit/angular-vwgcc2,如果您单击列make并打开控制台,则会显示我正在错误的错误。
答案 0 :(得分:1)
this
似乎在为您提供实际的行。您需要做的是通过将makeCellClicked
绑定到this
方法来告知this
实际上是什么{1>}:
onCellClicked: this.makeCellClicked.bind(this)
。
另请参阅您的updated StackBlitz。
答案 1 :(得分:0)
您应该使用具有简单逻辑的cellRenderer属性。对于复杂的逻辑渲染器,更方便的方法是使用cellRendererFramework:YourCustomRendererAngularComponent。
columnDefs = [
{
headerName: 'Col Name',
cellRendererFramwork: MyAngularRendererComponent, // RendererComponent suffix it is naming convention
cellRendererParams: {
onClick: (params) => this.click(params);
}
},
...
]
MyAngularRendererComponent应该实现AgRendererComponent。
在使用MyAngualrRendererComponent的angular模块中,也不要忘记输入以下代码:
@NgModule({
imports: [
AgGridModule.withCompoennts([
MyAngualrRendererComponent
])
]
})
上面的代码只是一小部分,请查看Stackblitz
上的完整示例