2013-11-28 11 views
14

Używam AngularJS i chciałbym przetworzyć dany #hash-fragment w pasku adresu. Jednak - i to jest klucz - nie będę używał fragmentu hash do kodowania ścieżki. Ale wydaje się, że AngularJS nalega na interpretację tego w ten sposób.Czy mogę odzyskać kontrolę nad fragmentem skrótu adresu URL z AngularJS?

Na przykład, gdy html5Mode jest wyłączona:

  • danym adresem URL: http://my.domain.com#my-hash
  • zamienia się http://my.domain.com/#/my-hash i
  • $location.hash() będzie pusta.

A kiedy html5Mode jest włączona:

  • Dany URL: http://my.domain.com#my-hash
  • zostaje przekształcony http://my.domain.com/my-hash i
  • $location.hash() nadal będzie pusta.

AngularJS musi myśleć: "och, masz html5, pozwól mi usunąć ten skrót dla ciebie". Jak taktowny ...

Jedynym sposobem, aby dostać coś od $location.hash() jest, gdy adres URL ma podwójne hash:

  • Dla danego URL: http://my.domain.com##my-hash
  • $location.hash() jest wreszcie równa "my-hash" i
  • jeśli również $locationProvider.html5Mode(true) jeden z skrótów jest usuwany z adresu URL.

Ale naprawdę potrzebuję prostego, pojedynczego znaku, aby pozostać nieprzetworzonym. czy to możliwe?

+0

jaki jest przypadek użycia? czy rozważałeś użycie 'search' zamiast hash? – charlietfl

+3

Jest to oryginalny przypadek użycia fragmentu skrótu: używam go, aby zwrócić uwagę na konkretną część bieżącego dokumentu. "search" jest zbyt szczegółowe i używane w innym celu. – mhelvens

+0

Nie sądzę, że istnieją proste sposoby na odzyskanie kontroli #, ale masz alternatywy, aby skupić się na części dokumentu, http://www.benlesh.com/2013/02/angular-js-scrolling- to-element-by-id.html, http://stackoverflow.com/questions/14712223/how-to-handle-anchor-hash-linking-in-angularjs, http://docs.angularjs.org/api/ ng. $ anchorScroll – SoluableNonagon

Odpowiedz

14

# wydaje się działać wystarczająco dobrze na stronie kątowej api docs. Tak więc przy odrobinie snoopingu i testowaniu stwierdziłem, że różnica jest różna.

+0

Ah, hashPrefix! Głupio, z perspektywy czasu, że nigdy tego nie próbowałem. :-) To nie jest idealne, ponieważ pozostawia jedną postać, której nie mogę już używać na początku fragmentu skrótu. Ale jestem pewien, że mogę znaleźć postać, dla której to nie ma znaczenia. Dzięki! – mhelvens

+0

Co jeśli ktoś nie chce używać html5Mode? –

+0

'hashPrefix' stosuje się również w trybie innym niż html5 (którego musi być w stanie zrezygnować w każdym razie, w przeglądarkach innych niż HTML5), zobacz https://docs.angularjs.org/guide/$location na przykład i dalej dokumentacja – towr