Angular 5 : 如何在列表中的按钮上动态绑定事件
Angular 5 : how to dynamically bind events on button from a list
<div id="home" class="tab-pane fade in" style="text-align:left;opacity: 1;" >
<button *ngFor="let tool of toolArray" class="m-btn btn btn-secondary" type="button" (click)="{{tool.ToolMethod}}()" placement="bottom"
ngbTooltip="{{tool.Tooltip}}">
<img src={{tool.ToolImgPath}} alt="" width="24" height="24"/>
</button>
</div>
比方说,我有一些由管理员管理的工具,如果用户登录,他可以使用该工具进行编辑。
let toolArray = [
{ToolCategory: "analysis"
ToolId: 96
ToolImgPath: "images/zoom-selection.png"
ToolMethod: "zoomToClickedFeature"
ToolName: "an_zoomto_selected"
Tooltip: "Zoom To Selected Feature"}
]
如果我使用 ngFor 在 html 中添加它,它会出现类似
的错误
Got interpolation ({{}}) where expression was expected
如果方法是控制器的成员,你应该使用this
像:(click)="this[tool.ToolMethod]()"
.
这是一个工作示例:
https://stackblitz.com/edit/angular-q2l54d?file=src%2Fapp%2Fapp.component.html
删除 (click)="{{tool.ToolMethod}}()"
到 (click)="tool.ToolMethod()"
的大括号并将您的代码重构为类似这样的内容,以正确获取对相应方法的引用:
public zoomToClickedFeature() {
console.log("do something");
}
public toolArray = [
{
ToolCategory: "analysis",
ToolId: 96,
ToolImgPath: "images/zoom-selection.png",
ToolMethod: this.zoomToClickedFeature,
ToolName: "an_zoomto_selected",
Tooltip: "Zoom To Selected Feature"
}
];
数组和函数必须是组件的 class 属性。
<div id="home" class="tab-pane fade in" style="text-align:left;opacity: 1;" >
<button *ngFor="let tool of toolArray" class="m-btn btn btn-secondary" type="button" (click)="{{tool.ToolMethod}}()" placement="bottom"
ngbTooltip="{{tool.Tooltip}}">
<img src={{tool.ToolImgPath}} alt="" width="24" height="24"/>
</button>
</div>
比方说,我有一些由管理员管理的工具,如果用户登录,他可以使用该工具进行编辑。
let toolArray = [
{ToolCategory: "analysis"
ToolId: 96
ToolImgPath: "images/zoom-selection.png"
ToolMethod: "zoomToClickedFeature"
ToolName: "an_zoomto_selected"
Tooltip: "Zoom To Selected Feature"}
]
如果我使用 ngFor 在 html 中添加它,它会出现类似
的错误Got interpolation ({{}}) where expression was expected
如果方法是控制器的成员,你应该使用this
像:(click)="this[tool.ToolMethod]()"
.
这是一个工作示例:
https://stackblitz.com/edit/angular-q2l54d?file=src%2Fapp%2Fapp.component.html
删除 (click)="{{tool.ToolMethod}}()"
到 (click)="tool.ToolMethod()"
的大括号并将您的代码重构为类似这样的内容,以正确获取对相应方法的引用:
public zoomToClickedFeature() {
console.log("do something");
}
public toolArray = [
{
ToolCategory: "analysis",
ToolId: 96,
ToolImgPath: "images/zoom-selection.png",
ToolMethod: this.zoomToClickedFeature,
ToolName: "an_zoomto_selected",
Tooltip: "Zoom To Selected Feature"
}
];
数组和函数必须是组件的 class 属性。