Angenommen, Sie verwenden Routen:
// 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'
});
...
Und in Ihrem HTML-Code möchten Sie zur Info-Seite navigieren, wenn Sie auf eine Schaltfläche klicken. Ein Weg wäre
<a href="#/about">
... aber es scheint, dass ng-click auch hier nützlich wäre.
- Ist diese Annahme richtig? Dieser ng-Klick anstelle des Ankers verwendet werden?
- Wenn ja, wie würde das funktionieren? IE:
<div ng-click="/about">
angularjs
routes
angularjs-routing
angularjs-ng-click
angularjs-ng-route
Robert Christian
quelle
quelle
Antworten:
Routen überwachen den
$location
Dienst und reagieren auf Änderungen der URL (normalerweise über den Hash). Um eine Route zu "aktivieren", ändern Sie einfach die URL. Der einfachste Weg, dies zu tun, ist mit Ankertags.Es wird nichts Komplizierteres benötigt. Wenn Sie dies jedoch über Code tun müssen, verwenden Sie den
$location
Dienst ordnungsgemäß :Was zum Beispiel eine Schaltfläche auslösen könnte:
quelle
path
undhash
dienen zwei verschiedenen Zwecken, können aber je nach Umstand den gleichen Effekt haben. In den meisten Fällen ist für striktes Routing (insbesondere beihtml5mode
aktiviertem)path
die kanonische Wahl. Ich habe die Antwort aktualisiert, um dies widerzuspiegeln./
. Wenn Sie die App von bereitstellen/app/index.html
, funktioniert dies nicht, da die absolute URL lautet/app/next.html
. Natürlich muss auch der Server so eingestellt sein, dass er Ihreindex.html
Datei zurückgibt, wenn er auf getroffen wird/next.html
. Fühlen Sie sich frei, einen Plunker / eine Geige zu posten, wenn Sie möchten, dass ich einen Blick darauf werfen kann.go
jedem Controller eine Methode hinzufügen ? (Oder erstellen Sie einen Root-Controller mit einergo
Methode?)<button click-go="/home">Click</button>
. Die Link-Funktion wäre nur diese:element.on("click", function () { $location.path(attrs.clickGo); });
Hier ist ein großartiger Tipp, den niemand erwähnt hat. In der Steuerung, in der sich die Funktion befindet, müssen Sie den Standortanbieter angeben:
quelle
Die Verwendung eines benutzerdefinierten Attributs (implementiert mit einer Direktive) ist möglicherweise der sauberste Weg. Hier ist meine Version, basierend auf den Vorschlägen von @Josh und @ sean.
Es hat einige nützliche Funktionen, aber ich bin neu in Angular, daher gibt es wahrscheinlich Raum für Verbesserungen.
quelle
clickLink
die Direktive den neuen Klick-Handler hinzufügt , wenn sich das Attribut ändert, aber den alten an Ort und Stelle lässt. Das Ergebnis könnte etwas chaotisch sein. Ich habe dies ursprünglich geschrieben, um es in einer Situation zu verwenden, in der sich dasclickLink
Attribut niemals ändern würde, also habe ich dieses lose Ende nie gebunden. Ich denke, das Beheben dieses Fehlers würde tatsächlich zu einfacherem Code führen - ich könnte versuchen, es zu tun, wenn ich Zeit habe (ha!)attrs.$observe
da. Vielen Dank für Ihre Vorschläge.Denken Sie daran, dass Sie bei Verwendung von ng-click für das Routing nicht mit der rechten Maustaste auf das Element klicken und "In neuem Tab öffnen" auswählen oder bei gedrückter Strg-Taste auf den Link klicken können. Ich versuche, ng-href zu verwenden, wenn es um Navigation geht. ng-click ist besser für Schaltflächen für Operationen oder visuelle Effekte wie das Reduzieren. Aber über würde ich nicht empfehlen. Wenn Sie die Route ändern, müssen Sie möglicherweise viele in der Anwendung platzierte ändern. Lassen Sie den Link von einer Methode zurückgeben. Beispiel: Über. Diese Methode platzieren Sie in einem Dienstprogramm
quelle
Ich verwendete
ng-click
Richtlinie eine Funktion aufzurufen, während Route templateUrl anfordert, zu entscheiden , welche<div>
zu sein hatshow
oderhide
innerhalb Route templateUrl Seite oder für verschiedene Szenarien.AngularJS 1.6.9
Sehen wir uns ein Beispiel an, wenn ich auf der Routing-Seite entweder das Hinzufügen
<div>
oder das Bearbeiten benötige<div>
, das ich mithilfe der übergeordneten Controller-Modelle$scope.addProduct
und des$scope.editProduct
Booleschen Werts steuere.RoutingTesting.html
TestingPage.html
beide Seiten -
RoutingTesting.html
(übergeordnet),TestingPage.html
(Routing-Seite) befinden sich im selben Verzeichnis,Hoffe das wird jemandem helfen.
quelle
Eine andere Lösung, aber ohne Verwendung von ng-click, die auch für andere Tags als funktioniert
<a>
:Auf diese Weise können Sie auch Parameter an Ihre Route übergeben: https://stackoverflow.com/a/40045556/838494
(Dies ist mein erster Tag mit eckigen. Sanftes Feedback ist willkommen)
quelle
Sie können verwenden:
Wenn Sie eine dynamische Variable in href möchten , können Sie dies folgendermaßen tun:
Wobei Link Angular Scope Variable ist.
quelle
ng-click
der der Standort geändert werden soll.Machen Sie es einfach wie folgt in Ihrem HTML-Text:
Fügen Sie in Ihrem Controller $ state wie folgt hinzu:
quelle