在数组的按钮的 ngFor 循环中生成不同的(单击)属性
Generate different (click) attributes in a ngFor loop of buttons from array
我有一个 JSON 文件,我从中获取配置以在工具栏中生成一组按钮。
在每条记录中,我存储有关每个按钮的信息,以及 class、图标...我还想在每个按钮中设置将通过事件触发的方法 (click)
如何在视图中生成每个按钮及其点击事件?
它是一个 angular 组件,它根据从这个 JSON
文件
收到的信息生成工具栏
我需要这样的东西:
HTML
<mat-button-toggle-group>
<mat-button-toggle *ngFor="let tool of tools">
<button [click]="tool.click"><i [class]="tool.class"></i></button>
</mat-button-toggle>
</mat-button-toggle-group>
数组(JSON 文件)
tools =
[
{ id: 0, class: 'fas fa-sign-out-alt', click: 'addPizza()'},
{ id: 1, class: 'fas fa-arrow-left', click: 'removePizza()' },
{ id: 2, class: 'far fa-sticky-note', click: 'updateGrid()' }
];
预期:生成一组按钮,每个按钮内都有特定的方法
进行两处更改,在模板中将 [click]="tool.click"
替换为 (click)="tool.click()"
,并在 TS 中将 click
属性 设为 函数
这样试试:
TS:
tools =
[
{ id: 0, class: 'fas fa-sign-out-alt', click: () => this.addPizza()},
{ id: 1, class: 'fas fa-arrow-left', click: () => this.removePizza() },
{ id: 2, class: 'far fa-sticky-note',click: () => this.updateGrid() }
];
模板:
<button (click)="tool.click()"><i [class]="tool.class"></i></button>
最后我用另一种方式解决了,
基本上它不起作用,因为我是通过组件中的输入检索信息,而不是通过组件本身内的直接变量(我在我的问题中省略了这个事实)。
所以最后我在组件中创建了一个方法来处理根据 JSON 文件中单击 属性 时设置的字符串触发的函数:
JSON:
tools =
[
{ id: 0, class: 'fas fa-sign-out-alt', click: 'addPizza'},
{ id: 1, class: 'fas fa-arrow-left', click: 'removePizza' },
{ id: 2, class: 'far fa-sticky-note', click: 'updateGrid' }
];
HTML:
<div>
<button *ngFor="let tool of tools" (click)="handleClick(tool.click)">
<i [class]="tool.class" ></i>
</button>
组件:
handleClick(method: string) {
switch (method) {
case 'addPizza':
this.addPizza();
break;
case 'removePizza':
this.removePizza();
break;
case 'updateGrid':
this.updateGrid();
break;
default:
break;
}
}
我有一个 JSON 文件,我从中获取配置以在工具栏中生成一组按钮。
在每条记录中,我存储有关每个按钮的信息,以及 class、图标...我还想在每个按钮中设置将通过事件触发的方法 (click)
如何在视图中生成每个按钮及其点击事件?
它是一个 angular 组件,它根据从这个 JSON
文件
我需要这样的东西:
HTML
<mat-button-toggle-group>
<mat-button-toggle *ngFor="let tool of tools">
<button [click]="tool.click"><i [class]="tool.class"></i></button>
</mat-button-toggle>
</mat-button-toggle-group>
数组(JSON 文件)
tools =
[
{ id: 0, class: 'fas fa-sign-out-alt', click: 'addPizza()'},
{ id: 1, class: 'fas fa-arrow-left', click: 'removePizza()' },
{ id: 2, class: 'far fa-sticky-note', click: 'updateGrid()' }
];
预期:生成一组按钮,每个按钮内都有特定的方法
进行两处更改,在模板中将 [click]="tool.click"
替换为 (click)="tool.click()"
,并在 TS 中将 click
属性 设为 函数
这样试试:
TS:
tools =
[
{ id: 0, class: 'fas fa-sign-out-alt', click: () => this.addPizza()},
{ id: 1, class: 'fas fa-arrow-left', click: () => this.removePizza() },
{ id: 2, class: 'far fa-sticky-note',click: () => this.updateGrid() }
];
模板:
<button (click)="tool.click()"><i [class]="tool.class"></i></button>
最后我用另一种方式解决了,
基本上它不起作用,因为我是通过组件中的输入检索信息,而不是通过组件本身内的直接变量(我在我的问题中省略了这个事实)。
所以最后我在组件中创建了一个方法来处理根据 JSON 文件中单击 属性 时设置的字符串触发的函数:
JSON:
tools =
[
{ id: 0, class: 'fas fa-sign-out-alt', click: 'addPizza'},
{ id: 1, class: 'fas fa-arrow-left', click: 'removePizza' },
{ id: 2, class: 'far fa-sticky-note', click: 'updateGrid' }
];
HTML:
<div>
<button *ngFor="let tool of tools" (click)="handleClick(tool.click)">
<i [class]="tool.class" ></i>
</button>
组件:
handleClick(method: string) {
switch (method) {
case 'addPizza':
this.addPizza();
break;
case 'removePizza':
this.removePizza();
break;
case 'updateGrid':
this.updateGrid();
break;
default:
break;
}
}