I @HostBinding
verwenden, um eine Klasse zusammen mit Chrome Drag zu setzen und API wie diese Tropfen:Angular 2 nicht erkennt Änderungen für @HostBinding
@Directive({ selector: '[sortable-article]' })
export class SortableArticleComponent {
@HostBinding('class.dragged-element')
isDraggedArticle: boolean = false;
constructor(elRef: ElementRef, private ref: ChangeDetectorRef, private appRef: ApplicationRef, private dndService: ArticleDndService) {
this.el = elRef.nativeElement;
Observable.fromEvent(this.el, 'dragstart').subscribe(e => this.onDragStart(<DragEvent> e));
Observable.fromEvent(this.el, 'drop').subscribe(e => this.onDrop(<DragEvent> e));
}
onDragStart(event: DragEvent) {
this.isDraggedArticle = true;
}
onDrop(event: DragEvent) {
event.preventDefault();
this.isDraggedArticle = false;
}
}
Was passiert, dass mehr Zeit ist dann nicht, die isDraggedArticle
Klasse nicht werde aus dem Element entfernt und ich weiß nicht warum. Ich habe versucht,
this.ref.detectChanges();
this.appRef.tick();
zum onDrop Verfahren Zugabe (wo ref
ist ein ChangeDetectorRef
und appRef
ist ein ApplicationRef
), aber es hilft nicht.
So Ihre onDrop Methode zur richtigen Zeit aufgerufen und isDraggedArticle nicht ändert? – Sam
Ja, guter Punkt, aber ich kann das bestätigen, weil tatsächlich mehr Sachen in onDrop passiert, die tatsächlich ausgeführt werden. – Lukas
Für mich ist dein Code richtig. Keine Änderungen, wenn Sie isDraggedArticle im Konstruktor initialisieren? @HostBinding ('class.dragged-element') isDraggedArticle: boolean; constructor() {this.isDraggedArticle = false} – Sam