2017-04-26 93 views
2

我正在嘗試在Angular 4中爲jQuery Confirm創建一個指令。但是,我很難停止綁定的事件發生。這裏是我的結構:Angular 4確認指令

menus.component.html:

<a (click)="delete(menu)" class="btn" confirm><i class="icon-trash"></i></a> 

menus.component.ts:

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

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; 
     }); 
    } 
} 

確認框確實出現,但事件在它之前被觸發,所以它沒用。我希望這個指令能夠阻止一個事件的發生,如果這個動作被確認了就會觸發它,否則就取消它。

+0

爲什麼沒用? –

+0

因爲無論我確認與否,事件總是被觸發。 – yenerunver

+0

OMG Angular 4發佈了嗎?什麼在做:O:O角3在哪裏? –

回答

2

實際上,你可以結合指令名和輸出在一起。

<button class="btn" (confirm)="delete()">delete</button> 

@Directive({ 
    selector: '[confirm]' 
}) 
export class ConfirmDirective { 
    @Output() confirm = new EventEmitter<any>(); 

    constructor(private el: ElementRef) { 
    } 

    @HostListener('click') 
    onClick() { 
     $.confirm({ 
     buttons: { 
    confirm:() => this.confirm.emit() 
    } 
    }); 
} 
} 
+0

我的問題仍然沒有解決。你的代碼中的delete()事件沒有被解僱@Julia – yenerunver

+0

你可以創建一個plunker,所以我可以看到它爲什麼不起作用? –

+0

我創建了一個Plunker,但它工作大聲笑。 https://plnkr.co/edit/J1GMyfGLx4bJ3e9hfXz3。然後我應該重新調試我的代碼。 – yenerunver

6

我會解決它是這樣的:

@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:() => {} 
     } 
    }); 
    } 

} 

你的HTML應該是這樣的:

<a (confirm-click)="delete(menu)" class="btn" confirm>Delete</a> 

Plunker Example

+0

哇,很好的解決方案! –

+0

感謝您的幫助,但我們有一個小問題。它不運行的功能,即使我用這樣的: yenerunver

+0

https://plnkr.co/edit/IFLiJHNY4OShirxQqGtg?p=preview – yurzui