Angular.js: Angular devrait fournir un moyen de faire défiler jusqu'à un élément spécifique de la page

Créé le 1 nov. 2010  ·  10Commentaires  ·  Source: angular/angular.js

Les identifiants de fragment (hash) sont généralement utilisés pour créer un lien vers des endroits spécifiques dans une longue page. Cela ne fonctionne pas avec angular puisque le hachage est utilisé pour implémenter la route. Un moyen de faire défiler la page vers un élément spécifique doit être fourni.

feature

Tous les 10 commentaires

Oui, et ensuite, nous devrions l'utiliser avec $location - comme maintenant, nous prenons également en charge le hachage, donc chaque fois que $location.hash() change, nous devons faire défiler jusqu'à celui-ci...

Cela a déjà été mis en œuvre. Si $location fonctionne en mode html5, créez simplement des liens href="#anchor"

Désolé de cogner dessus, mais que faire si nous ne sommes pas en mode html5 ? voir ces deux fichiers pour les références :
http://jsfiddle.net/gabrielstuff/SdGnR/ qui utilise le routeur et rompt le lien d'ancrage.
et celui-là
http://jsfiddle.net/gabrielstuff/nYxFg/ qui n'utilise aucun routeur et permet correctement de sauter sur la même page.

De plus, l'essai avec HTML5 n'a pas beaucoup aidé (mais c'est un autre ticket)

J'ai le même problème. Je ne suis pas en mode html5. Comment cela fonctionnerait-il en mode hashbang ?

Je suis d'accord que ce comportement est très inattendu. Même si quelqu'un n'utilise pas le mode HTML5, Angular ne devrait pas rompre ce comportement attendu lors de l'utilisation d'un hachage avec une ancre.

Si je comprends bien, Angular devrait simplement ignorer tout lien contenant des hachages explicites de toute façon. Si nous n'utilisons pas HTML5, le lien <a href="/something"... sera automatiquement réécrit sous la forme /#/something (sauf si je cible _self ). Donc, <a href="#something" devrait sans doute toujours aller à /#something

+1

Je pense que vous devriez utiliser anchorScroll pour le faire.

Juste curieux @IgorMinar pourrions-nous obtenir un commentaire pour savoir si ce problème va être résolu ou non? On pourrait affirmer que cela n'a pas besoin d'être basé sur des navigateurs obsolètes qui ne sont pas entièrement pris en charge, mais je pense qu'il s'agit d'une réponse claire pour savoir si les liens d'ancrage doivent ou non fonctionner avec les navigateurs qui ne prennent pas en charge l'API d'historique.

J'ai le problème cependant, si je suis à #/route1 alors il est difficile d'être à #/route1#anchor. Le hack mentionné ici (http://www.benlesh.com/2013/02/angular-js-scrolling-to-element-by-id.html) semble correct, mais ce serait idéal si cela "fonctionnait". Quoi qu'il en soit, si le hack $anchorScroll est la solution, il serait peut-être bon de le dire et peut-être que quelqu'un pourra mettre à jour la documentation pour refléter comment ce problème devrait être résolu pour les navigateurs plus anciens.

Ici ( http://stackoverflow.com/a/15935517/2071612) est une solution brillante.

BTW, j'ai soumis un PR (#9596) pour ajouter la prise en charge du défilement indépendamment de $location.hash() .

Cette page vous a été utile?
0 / 5 - 0 notes