Angular 4 确认指令
Angular 4 Confirm Directive
我正在尝试在 Angular 4 中为 jQuery Confirm 创建一个指令。但是,我很难阻止绑定事件的发生。这是我的结构:
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;
});
}
}
确实出现了确认框,但是事件在它之前触发,所以没有用。我希望此指令停止触发事件,如果确认操作则触发它,否则取消它。
我会这样解决:
@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>
您实际上可以将指令名称和输出组合在一起。
<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()
}
});
}
}
我正在尝试在 Angular 4 中为 jQuery Confirm 创建一个指令。但是,我很难阻止绑定事件的发生。这是我的结构:
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;
});
}
}
确实出现了确认框,但是事件在它之前触发,所以没有用。我希望此指令停止触发事件,如果确认操作则触发它,否则取消它。
我会这样解决:
@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>
您实际上可以将指令名称和输出组合在一起。
<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()
}
});
}
}