我对类型记录使用了角2.0.0,并试图构建一个基于组件接收的JSON数组的动态菜单系统。
var menu = [
{id:"menu1", title: " Menu 1", action: "addUser()"},
{id:"menu2", title: " Menu 2", action: "addPhoto()"},
{id:"menu3", title: " Menu 3", action: "addEmail()"}
]我想知道以下几点
谢谢你的帮助。
发布于 2017-02-01 02:27:49
(click)="item.action" 不起作用
你应该这样做:
(click)="onClick(item)"
然后根据您的item.action值处理逻辑。
onClick(item) {
switch (item.action){
case 'addUser()' :
this.addUser()
break;
case 'addPhoto()' :
this.addPhoto()
break;
default : whatever();
}
}或者其他的选择是:
将menu更改为从操作中取出():
var menu = [
{id:"menu1", title: " Menu 1", action: "addUser"},
{id:"menu2", title: " Menu 2", action: "addPhoto"},
{id:"menu3", title: " Menu 3", action: "addEmail"}
]比你的模板做得更好:(click)="item.action ? this[item.action].call(this) : 'return false;'"
或者只是:如果您的(click)="this[item.action].call(this)"是强制的,请使用item.action。
发布于 2016-10-05 22:02:15
要动态绑定到单击事件,请执行(click)="" --请参阅事件绑定,但由于这些都是字符串,所以它不会调用函数,您需要一个助手函数来确定要调用哪个函数,然后它将为您调用该函数
柱塞演示
这应该是可行的,你的行动方式也很好。
@Component({
selector: 'my-app',
template: `
<div class="link" [id]="item.id" *ngFor="let item of menu"
(click)="callFunction(item.action)">
{{ item.title }}
</div>
`,
})
export class App {
menu: any;
constructor() {
this.menu = [
{id:"menu1", title: "Add User", action: "addUser()"},
{id:"menu2", title: "Add Photo", action: "addPhoto()"},
{id:"menu3", title: "Add Email", action: "addEmail()"}
]
}
callFunction(func) {
switch(func) {
case "addUser()":
this.addUser()
break;
case "addPhoto()":
this.addPhoto()
break;
case "addEmail()":
this.addEmail()
break;
default:
alert("Not found")
}
}
addUser() {
alert("Add User Called!");
}
addPhoto() {
alert("Add Photo Called!");
}
addEmail() {
alert("Add Email Called!");
}
}有关模板语法的更多信息
https://stackoverflow.com/questions/39884163
复制相似问题