gpt4 book ai didi

javascript - Angular 2 不检测@HostBinding 的变化

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:25:52 27 4
gpt4 key购买 nike

我使用 @HostBinding 与 Chrome 的拖放 API 一起设置一个类,如下所示:

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

发生的情况是,isDraggedArticle 类没有从元素中删除,但我不知道为什么。我尝试添加

this.ref.detectChanges();
this.appRef.tick();

onDrop 方法(其中 ref 是一个 ChangeDetectorRefappRef 是一个 ApplicationRef),但是它没有帮助。

最佳答案

我想我找到了问题的解决方案: drop 事件不会在已拖动的项目上触发,但会在拖放到其上的项目上触发。这意味着我需要在 dragend 回调中设置 this.isDraggedArticle = false 而不是设置:

@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, 'dragend').subscribe(e => this.onDragEnd(<DragEvent> e));
}

onDragStart(event: DragEvent) {
this.isDraggedArticle = true;
}

onDragEnd(event: DragEvent) {
this.isDraggedArticle = false;
}
}

关于javascript - Angular 2 不检测@HostBinding 的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43546938/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com