Angular.js: Angular sollte eine Möglichkeit bieten, zu einem bestimmten Element auf der Seite zu scrollen

Erstellt am 1. Nov. 2010  ·  10Kommentare  ·  Quelle: angular/angular.js

Fragmentbezeichner (Hash) werden normalerweise verwendet, um auf bestimmte Stellen auf einer langen Seite zu verlinken. Dies funktioniert nicht mit Angular, da der Hash verwendet wird, um die Route zu implementieren. Es sollte eine Möglichkeit zum Herunterscrollen der Seite zu einem bestimmten Element bereitgestellt werden.

feature

Alle 10 Kommentare

Ja, und dann sollten wir es mit $location verwenden - wie jetzt unterstützen wir auch Hash, also sollten wir immer dann, wenn sich $location.hash() ändert, dorthin scrollen ...

Dies wurde bereits umgesetzt. Wenn $location im HTML5-Modus arbeitet, erstellen Sie einfach href="#anchor" Links

Tut mir leid, dass ich darauf stoße, aber was ist, wenn wir nicht im HTML5-Modus sind? Siehe diese zwei Geige für Referenzen:
http://jsfiddle.net/gabrielstuff/SdGnR/, die den Router verwenden und die Ankerverknüpfung unterbrechen.
und das hier
http://jsfiddle.net/gabrielstuff/nYxFg/ die keinen Router verwendet und das Springen auf derselben Seite korrekt erlaubt.

Auch das Ausprobieren mit HTML5 hat nicht viel geholfen (aber das ist ein anderes Ticket)

Ich habe das gleiche Problem. Ich bin nicht im HTML5-Modus. Wie würde das im Hashbang-Modus funktionieren?

Ich stimme zu, dass dieses Verhalten sehr unerwartet ist. Selbst wenn jemand den HTML5-Modus nicht verwendet, sollte Angular dieses erwartete Verhalten nicht unterbrechen, wenn ein Hash mit einem Anker verwendet wird.

Nach meinem Verständnis sollte Angular sowieso einfach alle Links mit expliziten Hashes ignorieren. Wenn wir kein HTML5 verwenden, wird der Link <a href="/something"... automatisch in /#/something umgeschrieben (es sei denn, ich ziele auf _self ). Also sollte <a href="#something" wohl immer zu /#something

+1

Ich denke, Sie sollten dafür anchorScroll verwenden.

Nur neugierig @IgorMinar, könnten wir einen Kommentar dazu bekommen, ob dieses Problem behoben wird oder nicht? Man könnte argumentieren, dass dies nicht darauf beruhen muss, dass veraltete Browser nicht vollständig unterstützt werden, aber ich denke, eine klare Antwort darauf, ob Ankerlinks mit Browsern funktionieren sollten, die die History-API nicht unterstützen.

Ich bekomme das Problem jedoch, wenn ich auf #/route1 bin, ist es schwierig, auf #/route1#anchor zu sein. Der hier erwähnte Hack (http://www.benlesh.com/2013/02/angular-js-scrolling-to-element-by-id.html) scheint ok, aber ideal wäre es, wenn das "einfach funktioniert". Wie auch immer, wenn der $anchorScroll Hack die Lösung ist, dann ist es vielleicht gut, dies zu sagen, und vielleicht kann jemand die Dokumentation aktualisieren, um widerzuspiegeln, wie dieses Problem für ältere Browser gelöst werden sollte.

Hier (http://stackoverflow.com/a/15935517/2071612) ist eine brillante Lösung.

Übrigens, ich habe eine PR (#9596) eingereicht, um Unterstützung für das Scrollen unabhängig von $location.hash() hinzuzufügen.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen