2013-05-14 15 views
11

Jak utworzyć łącze do innych lokalizacji aplikacji AngularJS w znaczniku zakotwiczenia A? Korzystam z trybu mieszania HTML5 i chcę uniknąć ponownego załadowania strony.Łącza aplikacji/trasy AngularJS w znaczniku zakotwiczenia z trybem HTML5

Na przykład, w trybie non-HTML5 Chciałbym to zrobić:

<a href='#/path'>Link</a> 

W trybie HTML5 mogę to zrobić:

<a href='/path'>Link</a> 

Ale to faktycznie powoduje przeglądarkę, aby przeładować nowy adres URL. Próbowałem również użyć składni ng-href, a także składni /#/path, ale żaden z nich nie działa tak, jak bym chciał.

Jak prawidłowo połączyć ze znacznikiem zakotwiczenia?

Odpowiedz

17

Aktualizacja:

Wydaje się, że jest to możliwe bez użycia $ lokalizację, po prostu trzeba zachować ten sam odnośnik bazową. From the docs:

Podczas korzystania z trybu historia API HTML5, trzeba będzie różne linki w różnych przeglądarkach, ale wszystko, co musisz zrobić, to określić regularne łącza URL, takich jak:? < a href = "/ niektóre foo = bar "> Link </a>

Gdy użytkownik kliknie na ten link,

  • W starszej wersji przeglądarki, zmiany URL do /index.html#!/some?foo=bar
  • W nowoczesnej przeglądarce adres URL zmienia się na/some? Foo = bar

W takich przypadkach łącza nie są przepisywane; zamiast tego przeglądarka wykona przeładowanie całej strony do oryginalnego łącza.

  • Łącza zawierające element docelowy. Przykład: < a href = "/ ext/link? A = b" target = "_ self"> link </a>
  • Bezwzględne linki prowadzące do innej domeny. Przykład: < a href = "http://angularjs.org/"> </a>
  • Łącza zaczynające się od '/', które prowadzą do innej ścieżki bazowej, gdy zdefiniowana jest podstawa. Przykład: < a href = "/ nie-my-base/link"> Link </a>

Stary:

Należy użyć $location service. Wstrzyknąć go do sterownika i umieścić go na zakres $ (lub w metodzie spożywczy):

function MainCtrl($scope,$location){ 
    $scope.goto = function(path){ 
    $location.path(path); 
    } 
} 
<a ng-click="goto('/path')">Link</a> 
+0

Oto, co zrobiłem teraz w kontrolerze na elemencie ciała.To tylko trochę dziwne, że nie ma standardowego sposobu robienia tego. –

+1

Okazuje się, że jest lepszy sposób - czy widzisz moją aktualizację? – joakimbl

+0

Nie miałem okazji jeszcze tego przetestować. Ale ufam, że to zadziała, więc przyjmuję teraz. –

0

ten pracował dla mnie w html5mode włączone.

<a ng-href='./path'>Link</a> 
Powiązane problemy