Załóżmy, że korzystasz z tras:
// bootstrap
myApp.config(['$routeProvider', '$locationProvider', function ($routeProvider, $locationProvider) {
$routeProvider.when('/home', {
templateUrl: 'partials/home.html',
controller: 'HomeCtrl'
});
$routeProvider.when('/about', {
templateUrl: 'partials/about.html',
controller: 'AboutCtrl'
});
...
A w html chcesz przejść do strony about po kliknięciu przycisku. Jednym ze sposobów byłoby
<a href="#/about">
... ale wydaje się, że kliknięcie ng również byłoby tu przydatne.
- Czy to założenie jest prawidłowe? Czy zamiast zakotwiczenia można użyć kliknięcia ng?
- Jeśli tak, jak to by działało? TO ZNACZY:
<div ng-click="/about">
angularjs
routes
angularjs-routing
angularjs-ng-click
angularjs-ng-route
Robert Christian
źródło
źródło
Odpowiedzi:
Trasy monitorują
$location
usługę i reagują na zmiany adresu URL (zazwyczaj za pomocą skrótu). Aby „aktywować” trasę, wystarczy zmienić adres URL. Najłatwiej to zrobić za pomocą tagów zakotwiczenia.Nic bardziej skomplikowanego nie jest potrzebne. Jeśli jednak musisz to zrobić z kodu, właściwym sposobem jest skorzystanie z
$location
usługi:Który na przykład przycisk może uruchomić:
źródło
path
ihash
służą dwóm różnym celom, ale w zależności od okoliczności mogą mieć ten sam efekt. W większości przypadków wybór ścisły będziehtml5mode
możliwy w przypadku ścisłego routingu (zwłaszcza z włączoną funkcją)path
. Zaktualizowałem odpowiedź, aby to odzwierciedlić./
. Jeśli podajesz aplikację z/app/index.html
, to nie zadziała, ponieważ jest to bezwzględny adres URL/app/next.html
. Oczywiście, serwer musi być ustawiony tak, aby zwracał twójindex.html
plik po trafieniu/next.html
. Jeśli chcesz, żebym rzucił okiem, możesz opublikować Plunker / Fiddle.go
metodę do każdego kontrolera? (Lub utworzyć kontroler root za pomocągo
metody?)<button click-go="/home">Click</button>
. : . Funkcja łączenia byłaby tylko taka:element.on("click", function () { $location.path(attrs.clickGo); });
Oto świetna wskazówka, o której nikt nie wspomniał. W kontrolerze, w którym znajduje się ta funkcja, musisz dołączyć dostawcę lokalizacji:
źródło
Użycie niestandardowego atrybutu (zaimplementowanego w dyrektywie) jest być może najczystszym sposobem. Oto moja wersja, oparta na sugestiach @Josh i @ sean.
Ma kilka przydatnych funkcji, ale jestem nowy w Angular, więc prawdopodobnie jest miejsce na ulepszenia.
źródło
clickLink
zmieni się atrybut, dyrektywa doda nowy moduł obsługi kliknięć, ale pozostawi stary na miejscu. Rezultat może być nieco chaotyczny. Pierwotnie napisałem to do użycia w sytuacji, gdyclickLink
atrybut nigdy się nie zmieni, więc nigdy nie związałem tego luźnego końca. Myślę, że naprawienie tego błędu doprowadziłoby do uproszczenia kodu - mógłbym spróbować to zrobić, kiedy będę miał czas (ha!)attrs.$observe
było. Dziękuję za twoje sugestie.Pamiętaj, że jeśli używasz ng-click do routingu, nie będziesz w stanie kliknąć elementu prawym przyciskiem myszy i wybrać „otwórz w nowej karcie” lub kliknij z wciśniętym klawiszem Ctrl. Staram się używać ng-href, jeśli chodzi o nawigację. ng-click lepiej jest używać na przyciskach do operacji lub efektów wizualnych, takich jak zwinięcie. Ale o nie polecam. Jeśli zmienisz trasę, być może będziesz musiał zmienić wiele z umieszczonych w aplikacji. Poproś o metodę zwracającą link. np .: o. Tę metodę umieszczasz w narzędziu
źródło
Użyłem
ng-click
dyrektywy, aby wywołać funkcję, podczas żądania trasy templateUrl, aby zdecydować, która<div>
ma być,show
lubhide
wewnątrz strony templateUrl trasy lub dla różnych scenariuszy.AngularJS 1.6.9
Zobaczmy przykład, gdy na stronie routingu potrzebuję dodawania
<div>
lub edycji<div>
, które kontroluję za pomocą modeli kontrolera nadrzędnego$scope.addProduct
i wartości$scope.editProduct
logicznej.RoutingTesting.html
TestingPage.html
obie strony -
RoutingTesting.html
(rodzic),TestingPage.html
(strona routingu) znajdują się w tym samym katalogu,Mam nadzieję, że to komuś pomoże.
źródło
Inne rozwiązanie, ale bez użycia ng-click, które nadal działa nawet w przypadku innych tagów niż
<a>
:W ten sposób możesz również przekazać parametry do trasy: https://stackoverflow.com/a/40045556/838494
(To mój pierwszy dzień z angularem. Mile widziane są delikatne opinie)
źródło
Możesz użyć:
Jeśli chcesz jakieś dynamiczne zmienne wewnątrz href, możesz to zrobić w ten sposób:
Gdzie link jest zmienną zakresu kątowego.
źródło
ng-click
zmiany lokalizacji.po prostu zrób to w następujący sposób w swoim pliku HTML:
I w kontrolerze dodaj $ state w następujący sposób:
źródło