У вас здесь два разных поведения. Поведение и щелчок поведения на разных селекторах. Таким образом, вы можете создать две разные директивы или одну директиву со входом для управления поведением.
$('button.hoverSound').hover(function() {
this.configService.playSound('Hover');
});
$('button.clickSound').click(function() {
this.configService.playSound('click');
});
Вышеуказанное будет реализовано как стипендиаты
@Directive({selector:'button.hoverSound'})
export class HoverSoundDirective {
public constructor(private configService: ConfigService) {}
@HostListener('mouseover')
public mouseOver() {
this.configService.playSound('Hover');
}
}
@Directive({selector:'button.clickSound'})
export class HoverSoundDirective {
public constructor(private configService: ConfigService) {}
@HostListener('click')
public click() {
this.configService.playSound('Click');
}
}
Как вы можете видеть, если вы используете jQuery подход к программированию внешнего интерфейса, результирующий исходный код будет длиннее и требует больше времени для обслуживания.
Лучше отбросить то, что вы сделали с jQuery, и начать заново с Angular / React / Vue и подходить к проблемам из дизайна веб-компонента.
ОБНОВЛЕНИЕ:
Вы можете использовать входные параметры для настройки работы директивы. Я рекомендую вам прочитать руководство Tour of Heros на веб-сайте Angular. Который охватывает тему создания веб-компонентов.
https://angular.io/tutorial
Создать общую директиву для игры:
@Directive({selector:'button[playable]'})
export class PlayableDirective {
public constructor(private configService: ConfigService) {}
@Input('playable') playable: string;
@Input() hover: boolean = false;
@HostListener('mouseover')
public mouseOver() {
if(this.hover) {
this.configService.playSound(this.playable);
}
}
@HostListener('click')
public click() {
if(!this.hover) {
this.configService.playSound(this.playable);
}
}
}
Вышеуказанное создает директиву, которая будет воспроизводить звук при нажатии кнопки. HTML-разметка будет выглядеть следующим образом.
<button playable="Powerups">Click Me</button>
Вы можете добавить параметр, чтобы использовать состояние наведения для воспроизведения звука.
<button playable="Powerups" [hover]="true">Click Me</button>
Какие входы и логика вы используете внутри директивы, зависит от вас.