Насколько я знаю, имена событий Dynami c невозможны в Stencil, возможно, потому что имя события интерпретируется до загрузки компонента.
Вместо этого вы можете прикрепить слушателей непосредственно к элементам:
export class Slider {
@Prop() slider_id: string;
@Event() valueChange: EventEmitter<null>;
onValueChange(change){
this.slider_value = change.value;
this.valueChange.emit()
}
]
export class ParentComponent{
onSliderValueChange(id: string){
console.log('event', id)
}
render(){
return (
<div class='container'>
<slider-input slider_id={'slider_A'} onValueChange={() => this.onSliderValueChange('A')} slider_title={'S1'} ></slider-input>
<slider-input slider_id={'slider_B'} onValueChange={() => this.onSliderValueChange('B')} slider_title={'S2'} ></slider-input>
<slider-input slider_id={'slider_C'} onValueChange={() => this.onSliderValueChange('C')} slider_title={'S3'} ></slider-input>
</div>
);
}
}
Или вы можете добавить слушателя вручную:
@Element() el: HTMLElement;
this.el.querySelector('slider-input').addEventListener('valueChange', e => {
switch(e.currentTarget.slider_id) {
case 'slider_A':
console.log('event A');
break;
case 'slider_B':
console.log('event B');
break;
}
});
// or
this.el.querySelector('slider-input[slider_id=slider_A]')
.addEventListener('valueChange', () => console.log('event A');