Function 角度2:从字符串名称调用函数
我不确定这个问题是否与Angular 2或更多的字体本身有关。但无论如何,我有一个发射物体的组件Function 角度2:从字符串名称调用函数,function,angular,typescript,eventemitter,Function,Angular,Typescript,Eventemitter,我不确定这个问题是否与Angular 2或更多的字体本身有关。但无论如何,我有一个发射物体的组件 <grid" (gridButtonClickEvent)="gridEvent($event)"></grid> 这是我得到的事件格式 {Key: value} 所以基本上它是一个简单的物体。 我想调用一个名为Key的函数,并将值作为参数传递,这怎么可能呢?对象键会有所不同,但我知道所有可能的变体,并且已经在我的组件中注册了功能 private Key() {} 我在
<grid" (gridButtonClickEvent)="gridEvent($event)"></grid>
这是我得到的事件格式
{Key: value}
所以基本上它是一个简单的物体。
我想调用一个名为Key
的函数,并将值作为参数传递,这怎么可能呢?对象键
会有所不同,但我知道所有可能的变体,并且已经在我的组件中注册了功能
private Key() {}
我在尝试这样的事情
private gridEvent(event) {
let eventName = Object.keys(event)[0];
window[eventName]();
}
但是它说
window[eventName] is not a function
试试这个:
private gridEvent(event) {
let methodName = Object.keys(event)[0];
if(this[methodName]) {
// method exists in the component
let param = event[methodName];
this[methodName](param); // call it
}
}
更直观的方法是将发射对象构造为:
{ methodName: 'method1', methodParam: someValue }
然后在组件中:
private gridEvent(event) {
let methodName = event.methodName;
if(this[methodName]) {
// method exists on the component
let param = event.methodParam;
this[methodName](param); // call it
}
}
然而,如果不是真的有必要,我个人会避免这样做。而是发出一个应该触发的操作,然后执行一些switch语句来调用相应的方法。我认为这是一种更愚蠢的方法,但更容易推理。1。您的窗口中是否有此事件作为属性?2.你为什么要这样做?将函数作为对象属性传递不是很简单吗?这是一个非常有用且简单的解决方案。在Angular 6中就像一个符咒。非常感谢。
private gridEvent(event) {
let methodName = event.methodName;
if(this[methodName]) {
// method exists on the component
let param = event.methodParam;
this[methodName](param); // call it
}
}