Ich versuche eine Angular2-Attribut-Direktive zu schreiben, um das Verhalten bestimmter Elemente zu modifizieren. Genauer gesagt möchte ich ein Attribut auf bestimmte Elemente anwenden, die Click-Handler haben und verhindern, dass die gebundene Funktion unter bestimmten Bedingungen ausgeführt wird.Angular2 Direktive zum Ändern der Klick-Handhabung
So, jetzt habe ich ein Element z.B .:
<button (click)="onClick(param1, param2)"></button>
onClick eine Funktion auf die Komponente deklariert ist, die die Schaltfläche Element dabei einige Arbeit ausrichtet.
Was würde ich tun möchte, ist wie etwas schreiben:
<button (click)="onClick(param1, param2)" online-only></button>
und eine Richtlinie haben wie:
@Directive({
selector: '[online-only]',
})
export class OnlineOnlyDirective {
@HostListener('click', ['$event'])
onClick(e) {
if(someCondition){
e.preventDefault();
e.stopPropagation();
}
}
}
Aber klicken Handler wird zuerst ausgeführt, also nicht meine Richtlinie geben die Möglichkeit, Stoppen Sie die Ausführung. Ein zweiter Ansatz, über den ich nachdachte, war das Ersetzen (Klicken) mit meinem eigenen Handler zB ([onlineClick] = "onClick") und Ausführen der übergebenen Funktion, wenn die Direktive dies für richtig hält, aber auf diese Weise kann ich keine Parameter an onClick übergeben und ist ein bisschen seltsamer anzusehen.
Haben Sie irgendwelche Gedanken darüber, so etwas zu tun?
Yeap, viel besser auf meinem beschriebenen zweiten Ansatz. Die Verwendung eines EventEmitter, anstatt die Aufruffunktion zu übergeben, macht den Unterschied. Der erste Ansatz wäre eleganter, wird aber wahrscheinlich nicht von angular2 unterstützt, wie Sie auch sagten. – masimplo
Nur neugierig, ob der Selektor "nur online" sein sollte? Versuchen herauszufinden, was mit dieser Richtlinie passiert ist. –
Ich weiß nicht, ob oder wie 'only-only' mit der Frage verwandt ist –