Es gibt einige Möglichkeiten, dies zu tun, wie es scheint.
Option 1: Native Angular
Angular bietet einen $anchorScroll
Service an, aber die Dokumentation fehlt stark und ich konnte sie nicht zum Laufen bringen.
Unter http://www.benlesh.com/2013/02/angular-js-scrolling-to-element-by-id.html finden Sie einige Einblicke in $anchorScroll
.
Option 2: Benutzerdefinierte Direktive / natives JavaScript
Eine andere Möglichkeit, die ich getestet habe, war das Erstellen einer benutzerdefinierten Direktive und deren Verwendung el.scrollIntoView()
. Dies funktioniert ziemlich anständig, indem Sie in Ihrer Direktiven-Link-Funktion im Grunde Folgendes tun:
var el = document.getElementById(attrs.href);
el.scrollIntoView();
Es scheint jedoch etwas übertrieben, beides zu tun, wenn der Browser dies nativ unterstützt, oder?
Option 3: Angular Override / Native Browser
Wenn Sie sich http://docs.angularjs.org/guide/dev_guide.services.$location und den Abschnitt zum Umschreiben von HTML-Links ansehen , werden Sie feststellen, dass Links im Folgenden nicht neu geschrieben werden:
Links, die Zielelemente enthalten
Beispiel: <a href="https://stackoverflow.com/ext/link?a=b" target="_self">link</a>
Alles, was Sie tun müssen, ist das target
Attribut zu Ihren Links hinzuzufügen , wie folgt :
<a href="#anchorLinkID" target="_self">Go to inpage section</a>
Angular verwendet standardmäßig den Browser. Da es sich um einen Ankerlink und nicht um eine andere Basis-URL handelt, scrollt der Browser wie gewünscht zum richtigen Speicherort.
Ich habe mich für Option 3 entschieden, weil es am besten ist, sich hier auf native Browserfunktionen zu verlassen, und uns Zeit und Mühe spart.
Ich muss beachten, dass Angular nach einer erfolgreichen Änderung von Bildlauf und Hash den Hash weiterverfolgt und in seinen benutzerdefinierten Stil umschreibt. Der Browser hat sein Geschäft jedoch bereits abgeschlossen und Sie können loslegen.