Angular 4确认指令

yen*_*ver 2 angular-directive jquery-confirm angular

我正在尝试在Angular 4中为jQuery Confirm创建一个指令.但是,我很难停止发生绑定事件.这是我的结构:

menus.component.html:

<a (click)="delete(menu)" class="btn" confirm><i class="icon-trash"></i></a>
Run Code Online (Sandbox Code Playgroud)

menus.component.ts:

delete(menu: Menu): void {
    this.menuService.delete(menu.id)
        .subscribe(
            error =>  this.errorMessage = <any>error);
}
Run Code Online (Sandbox Code Playgroud)

confirm.directive.ts:

import {Directive, ElementRef, Input} from '@angular/core';

@Directive({ selector: '[confirm]' })
export class ConfirmDirective {
    constructor(el: ElementRef) {
        $(el.nativeElement).on('click', function () {
            $(this).confirm({
                confirm: function () {
                    return true;
                }
            });

            return false;
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

确认框确实出现,但事件在它之前被触发,所以它没用.我希望此指令停止触发事件,如果确认操作则触发它,否则取消它.

yur*_*zui 7

我会像这样解决它:

@Directive({ 
  selector: '[confirm]' 
})
export class ConfirmDirective {

  @Output('confirm-click') click: any = new EventEmitter();

  @HostListener('click', ['$event']) clicked(e) {
    $.confirm({
      buttons: {
        confirm: () => this.click.emit(),
        cancel: () => {}
      }
    });
  }

}
Run Code Online (Sandbox Code Playgroud)

你的HTML应该是这样的:

<a (confirm-click)="delete(menu)" class="btn" confirm>Delete</a>
Run Code Online (Sandbox Code Playgroud)

Plunker示例