通过Object动态分配和调用函数,Angular 6?
Dynamic function assigning and calling through Object, Angular 6?
我为动态生成的按钮分配了一个点击处理程序。我在点击处理程序函数中调用回调。不幸的是,我收到一条错误消息,指出
"Callback function is not a function".
我在下面提供基本代码。
HTML(组件 2)-
<button *ngFor="let btn of content.buttons" type="button"
(click)="btn.func()" class="{{btn.type}}">
<span class="btn-text">{{btn.text}}</span>
</button>
TS(组件 2)-
@Component({
selector: 'app-popup',
})
@Input() content;
我传递数据的组件代码 -
HTML(组件 1)-
<app-popup [content]="popupContent"></app-popup>
TS(组件 1)-
this.popupContent = {
"buttons":[{
"text":"OK",
"type":"btn-red",
"func": this.someHandler
}]
};
someCallbackFunction(){
console.log('I am a callback function');
}
someHandler(){
this.someCallbackFunction();
}
当我在单击按钮时触发事件时,它会抛出此错误-
ERROR TypeError: this.someCallbackFunction is not a function
我也试过将处理程序设置为
(click)="btn[func]()"
但不幸的是它对我不起作用。
请提出解决方案。谢谢:)
尝试通过粗箭头函数调用该函数,这样它应该具有正确的 this
上下文。只需更改您对它的定义即可。
"buttons":[{
"text":"OK",
"type":"btn-red",
"func": () => { this.someHandler(); }
}];
Read关于上下文丢失和找不到函数的原因。
Modify "func": this.someHandler
to "func" :() => this.someHandler()
这样试试:
buttons =[{
"text":"OK",
"type":"btn-red",
"func" :() => this.someHandler()
}]
请为此使用@Output
弹出component.ts(子组件);
Html
<button *ngFor="let btn of content.buttons" type="button" (click)="btnClicked()" class="{{btn.type}}">
<span class="btn-text">{{btn.text}}</span>
</button>
Ts(子组件)
import { Output, EventEmitter } from '@angular/core';
@Output() onBtnClicked = new EventEmitter<any>();
btnClicked(){
this.onBtnClicked.emit(1);
}
在父组件
Html(父组件)
<app-popup [content]="popupContent" (onBtnClicked)="onBtnClicked($event)"></app-popup>
Ts(父组件)
onBtnClicked(event){
}
我为动态生成的按钮分配了一个点击处理程序。我在点击处理程序函数中调用回调。不幸的是,我收到一条错误消息,指出
"Callback function is not a function".
我在下面提供基本代码。
HTML(组件 2)-
<button *ngFor="let btn of content.buttons" type="button"
(click)="btn.func()" class="{{btn.type}}">
<span class="btn-text">{{btn.text}}</span>
</button>
TS(组件 2)-
@Component({
selector: 'app-popup',
})
@Input() content;
我传递数据的组件代码 -
HTML(组件 1)-
<app-popup [content]="popupContent"></app-popup>
TS(组件 1)-
this.popupContent = {
"buttons":[{
"text":"OK",
"type":"btn-red",
"func": this.someHandler
}]
};
someCallbackFunction(){
console.log('I am a callback function');
}
someHandler(){
this.someCallbackFunction();
}
当我在单击按钮时触发事件时,它会抛出此错误-
ERROR TypeError: this.someCallbackFunction is not a function
我也试过将处理程序设置为
(click)="btn[func]()"
但不幸的是它对我不起作用。
请提出解决方案。谢谢:)
尝试通过粗箭头函数调用该函数,这样它应该具有正确的 this
上下文。只需更改您对它的定义即可。
"buttons":[{
"text":"OK",
"type":"btn-red",
"func": () => { this.someHandler(); }
}];
Read关于上下文丢失和找不到函数的原因。
Modify
"func": this.someHandler
to"func" :() => this.someHandler()
这样试试:
buttons =[{
"text":"OK",
"type":"btn-red",
"func" :() => this.someHandler()
}]
请为此使用@Output
弹出component.ts(子组件); Html
<button *ngFor="let btn of content.buttons" type="button" (click)="btnClicked()" class="{{btn.type}}">
<span class="btn-text">{{btn.text}}</span>
</button>
Ts(子组件)
import { Output, EventEmitter } from '@angular/core';
@Output() onBtnClicked = new EventEmitter<any>();
btnClicked(){
this.onBtnClicked.emit(1);
}
在父组件 Html(父组件)
<app-popup [content]="popupContent" (onBtnClicked)="onBtnClicked($event)"></app-popup>
Ts(父组件)
onBtnClicked(event){
}