Ich versuche herauszufinden, wie das div auf Mausklick in einer Weise markieren, dass nur ein Element hervorgehoben werden sollte. Wenn ich (onmouseup) (es nicht onmouseclick oder onmouseClick erkennt) alle Elemente werden markiert. Das Folgende ist der Richtliniencode. Here is the Plnkr CodeAngular highlight Direktive, um das div bei Klick zu markieren
import {Directive, ElementRef} from "@angular/core";
@Directive({
selector:'[highlight]',
host: {
'(mouseup)': 'onMouseUp()',
}
// host: {
// '(mouseenter)': 'onMouseEnter()',
// '(mouseleave)': 'onMouseLeave()',
// }
})
export class Highlight{
private el:ElementRef;
constructor(el:ElementRef){
this.el = el;
}
onMouseEnter(){
console.log(this.el);
this.el.nativeElement.style.backgroundColor = 'white';
this.el.nativeElement.style.backgroundColor = '#D1D301';
}
onMouseLeave(){
this.el.nativeElement.style.backgroundColor = 'black';
this.el.nativeElement.style.backgroundColor = 'white';
}
onMouseUp(){
console.log(this.el);
this.el.nativeElement.style.backgroundColor = 'white';
this.el.nativeElement.style.backgroundColor = '#D1D301';
}
}
Wenn der Benutzer auf ein Quadrat klickt, möchten Sie, dass alle anderen zu Weiß zurückkehren, oder? – acdcjunior
Dies wird schwierig sein, wie Sie es strukturiert haben. Ihre Anweisung müsste das DOM durchlaufen und Annahmen über die DOM-Struktur treffen (nicht gut). Anstelle einer Direktive für die gesamte Liste wäre ein wahrscheinlich besseres Design das Hinzufügen der Direktive zu jedem Element und das Ausgeben eines Ereignisses (verwenden Sie eine Output-Eigenschaft), wenn Sie mit der Maus klicken. Die übergeordnete Komponente würde dann durch ihre Liste iterieren und eine öffentliche Methode für die Anweisung aufrufen, um jedes Element zu markieren. Dann würde es eine öffentliche Methode der Richtlinie nennen, um die eine hervorzuheben. Ähnlich einer Tabs-Implementierung. –
Schauen Sie in die ng-Klasse – WesW