Ich habe Probleme mit Angular 2 und Touch-Geräten. Insbesondere wenn eine Komponente über NgFor gerendert wird und über den Bildschirm gezogen wird. Das Problem tritt auf, wenn während eines Berührungswiderlaufs (aufgrund eines externen Ereignisses, das die an den NgFor gebundene Daten aktualisiert, was in meiner App üblich ist) ein erneutes Rendern des NgFor auftritt. Die touchmove
Ereignisse stoppen zu feuern, und Sie müssen Ihren Finger heben und legen Sie es wieder zurück, was eine schreckliche mobile Erfahrung ist. Dieses Problem tritt nicht auf, wenn Sie eine Maus verwenden.Gibt es eine Möglichkeit, DOM-Entfernung in Angular 2 RC5 zu verhindern?
Wesentlichen in meiner app höre ich für das touchstart
Ereignis auf meine Komponente, zeigen ein anderes ‚DragComponent‘ über eine bedingte *ngIf="isDragging"
(die nicht innerhalb der NgFor ist), und es wird über den Bildschirm auf der Grundlage der touchmove
Ereignispositionsdaten bewegt .
Ich weiß, warum das passiert. Dies liegt an der Browser-Implementierung der Touch Spec. Normalerweise umkreife ich dieses Problem in vanilla js, indem ich das DOM-Element im Speicher belasse, bis das Ereignis touchend
oder touchcancel
ausgelöst wird. Angular steuert jedoch jetzt das DOM! Und sie entfernen das Element, solange es noch benutzt wird!
Schauen Sie sich diesen Plumer http://plnkr.co/edit/QR6WDzv6NxOmn6LXTngG?p=preview an, um mehr von einem Verständnis dessen zu bekommen, was ich versuche zu beschreiben. (Hinweis Touchscreen erforderlich oder verwenden Touch-Emulation in Chrome DevTools)
Ich habe auch ein Problem #9864 im Angular Repo geschaffen, aber bisher keine Antwort erhalten hatte. Ich verstehe, dass sie damit beschäftigt sind, sich auf das Finale vorzubereiten, aber meiner Meinung nach sollte dies vor dem Finale gelöst werden, da viele Benutzer Angular auf Touch-Geräten verwenden werden.
Ich würde mich über alle Tipps/Workarounds/Hacks freuen. Fühlen Sie sich frei, den Plunker mit einer Lösung zu aktualisieren.