Wie markiere ich einen aktuellen Menüpunkt?
Macht AngularJS in irgendeiner Weise helfen mit der Einstellung eines active
Klasse auf den link für die aktuelle Seite?
Ich glaube, es gibt einige Magische Art und Weise dies geschehen ist, aber ich kann nicht scheinen, zu finden.
Mein Menü sieht wie folgt aus:
<ul>
<li><a class="active" href="/tasks">Tasks</a>
<li><a href="/actions">Tasks</a>
</ul>
und ich habe Controllern für jeden von Ihnen in meine Routen: TasksController
und ActionsController
.
Aber ich kann nicht herausfinden, einen Weg zu binden, die "active" - Klasse a
links zu den Controllern.
Irgendwelche Tipps?
InformationsquelleAutor der Frage drozzy | 2012-09-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Blick auf
auf controller
Mit diesem Aufgaben-Verknüpfung wird die active Klasse, in der jede url, die beginnt mit '/Aufgaben'(z.B. '/Aufgaben/1/Berichte")
InformationsquelleAutor der Antwort Renan Tomal Fernandes
Schlage ich vor, eine Richtlinie auf einen link.
Aber seine noch nicht perfekt. Watch out für die hashbangs 😉
Hier ist der javascript-Richtlinie:
und hier ist, wie es wäre, in html verwendet:
nachher styling mit css:
InformationsquelleAutor der Antwort kfis
Hier ist eine einfache Methode, die gut funktioniert mit Eckigen.
Innerhalb Ihrer AngularJS-controller:
In diesem thread gibt es eine Reihe von anderen ähnlichen Antworten.
Wie setzen bootstrap navbar aktiven-Klasse mit Angular JS?
InformationsquelleAutor der Antwort Ender2050
Nur meine zwei Cent hinzu, in der Debatte, die ich gemacht habe, ein reines Winkel-Modul (ohne jQuery), und es funktioniert auch mit hash-urls, die Daten enthalten. (z.B.
#/this/is/path?this=is&some=data
)Fügen Sie einfach ein Modul als Abhängigkeit und
auto-active
einer der Vorfahren des Menüs. Wie diese:Und das Modul wie folgt Aussehen:
(Sie können natürlich nur mit der Direktive Teil)
Es ist auch Wert zu bemerken, dass dies nicht funktioniert für leer-hashes (z.B.
example.com/#
oder nurexample.com
) es muss mindestensexample.com/#/
oder nurexample.com#/
. Aber dies geschieht automatisch mit ngResource und dergleichen.Und hier ist die Geige: http://jsfiddle.net/gy2an/8/
InformationsquelleAutor der Antwort Pylinux
In meinem Fall habe ich dieses problem gelöst, indem erstellen eines einfachen controller verantwortlich für die navigation
Und durch Zugabe von ng-Klasse, um das element in etwa so:
InformationsquelleAutor der Antwort Djamel
Es ist ein
ng-class
Richtlinie bindet die Variablen und css-Klassen.Es akzeptiert auch das Objekt (className vs bool-Wert-Paare).
Hier ist das Beispiel, http://plnkr.co/edit/SWZAqj
InformationsquelleAutor der Antwort Tosh
Den Antwort von @Renan-tomal-fernandes ist gut, aber benötigt ein paar Verbesserungen, um korrekt zu arbeiten.
Wie es war, es würde immer erkennen, dass der link zur Startseite ( /) ausgelöst, auch wenn Sie in einem anderen Abschnitt.
So, ich habe mich verbessert es ein wenig, hier ist der code.
Ich arbeite mit Bootstrap also der aktive Teil ist in die
<li>
- element anstelle des die<a>
.Controller
Vorlage
InformationsquelleAutor der Antwort holographix
Für AngularUI Router-Benutzer:
Und das wird ein
active
Klasse auf das Objekt ausgewählt ist.InformationsquelleAutor der Antwort frankie4fingers
Hier ist die Lösung, die ich mir ausgedacht habe, nach der Lektüre einige gute Vorschläge oben. In meiner besonderen situation, die ich versuchte zu verwenden Bootstrap-tabs-Komponente wie mein Menü, aber nicht wollen, verwenden Sie die Angular-UI-version, weil ich will die tabs zu handeln, als ein Menü, wo jede Registerkarte Lesezeichen in der Lage, statt der tabs handeln als navigation für eine einzelne Seite. (Siehe http://angular-ui.github.io/bootstrap/#/tabs, wenn Sie daran interessiert sind, was die Angular-UI-version von bootstrap tabs aussieht).
Ich mochte kfis Antwort über die Erstellung Ihrer eigenen Richtlinie, um diese zu bewältigen, allerdings schien es umständlich haben eine Richtlinie, die nötig ist, um sich auf jeden einzelnen link. Also habe ich mein eigenes erstellt Winkel-Richtlinie, die platziert wird, statt nur einmal auf die
ul
. Nur im Fall, dass sonst jemand versucht, das gleiche zu tun, ich dachte, ich würde es hier posten, obwohl, wie ich sagte, viele der oben genannten Lösungen arbeiten, wie gut. Dies ist eine etwas komplexere Lösung, soweit die javascript geht, aber es schafft eine wiederverwendbare Komponente mit minimalem markup.Hier ist das javascript für die Richtlinie und die route provider für
ng:view
:Dann in dein html ist ganz einfach:
Hier ist die plunker: http://plnkr.co/edit/xwGtGqrT7kWoCKnGDHYN?p=preview.
InformationsquelleAutor der Antwort corinnaerin
Implementieren Sie können dies sehr einfach, hier ein Beispiel:
Und dein Controller sollte so sein:
InformationsquelleAutor der Antwort Ejaz
Ich hatte ähnliches problem mit Menü befindet sich außerhalb Bereich der Steuerung. Nicht sicher, ob dies die beste Lösung oder eine empfohlen, aber das ist was für mich gearbeitet. Ich habe Folgendes zu meiner app-Konfiguration:
Dann in der view habe ich:
InformationsquelleAutor der Antwort mrt
Mithilfe einer Richtlinie (seit wir tun, DOM-manipulation) das folgende ist wahrscheinlich die am nächsten an Dinge zu tun, die "Winkel-Weg":
Dann Ihre HTML würde das so Aussehen:
InformationsquelleAutor der Antwort Wesley Hales
Habe ich es wie folgt:
Diese können Sie links in einem Abschnitt, der hat den Titel-aktive Richtlinie:
Dieser Ansatz scheint viel sauberer als andere, aber für mich.
Auch, wenn Sie mit jQuery sind, können Sie machen es viel eleganter ist, weil jQlite nur basic Selektor unterstützen. Eine viel sauberere version mit jquery eingebunden, bevor Winkel einschließen würde wie folgt Aussehen:
Hier ein jsFiddle
InformationsquelleAutor der Antwort konsumer
Meine Lösung für dieses problem, verwenden Sie
route.current
in das eckige Vorlage.Als Sie die
/tasks
route zum highlight in Ihrem Menü, können Sie Ihre eigene ImmobiliemenuItem
um die Routen erklärt, die von Ihrem Modul:Dann in Ihre Vorlage
tasks.html
können Sie folgendeng-class
Richtlinie:Meiner Meinung nach, das ist viel sauberer als alle vorgeschlagenen Lösungen.
InformationsquelleAutor der Antwort François Maturel
Hier ist eine Erweiterung auf kfis Richtlinie, die ich Tat, um unterschiedliche Ebenen der übereinstimmenden Pfad. Im wesentlichen fand ich die Notwendigkeit einer passenden URL-Pfade bis zu einer bestimmten Tiefe, als eine exakte Abstimmung nicht ermöglicht, Schachteln und default-Zustand Umleitungen. Hoffe, das hilft.
Und hier ist, wie ich den link
Dieser Richtlinie entsprechen, die Tiefe Ebene in den angegebenen Attribut-Wert für die Richtlinie. Bedeutet nur, es kann an anderer Stelle eingesetzt werden um ein Vielfaches.
InformationsquelleAutor der Antwort pkbyron
Hier ist noch eine weitere Richtlinie zu markieren, aktive links.
Key features:
Code:
Verwendung:
Einfaches Beispiel mit kantigem Ausdruck, sagen wir $Umfang.var = 2, dann wird der link aktiv sein, wenn die Lage ist /url/2 :
Bootstrap Beispiel, parent-li aktiv Klasse:
Beispiel mit verschachtelten urls, link wird aktiv, wenn irgendeine verschachtelte url aktiv ist (d.h. /url/1, /url/2, url/1/2/...)
Komplexen Beispiel-link verweist auf eine url (/url1), wird aber aktiv, wenn ein anderer ausgewählt ist (/url2):
Beispiel mit Behinderten link, wenn es nicht aktiv ist wird es 'deaktiviert' Klasse:
Alle active-link-* Attribute können verwendet werden, in beliebiger Kombination, so sehr komplexe Bedingungen umgesetzt werden könnten.
InformationsquelleAutor der Antwort Eugene Fidelin
Wenn Sie möchten, dass die links für die Richtlinie in einem wrapper, anstatt Sie, jeden einzelnen link (macht es einfacher den Rahmen, in Batarang), das funktioniert ziemlich gut zu:
Markup wäre einfach:
Sollte ich auch erwähnen, dass ich mit 'voll Fett' jQuery in diesem Beispiel, aber Sie können leicht ändern, was ich getan habe mit den filtern und so weiter.
InformationsquelleAutor der Antwort marksyzm
Laut @kfis 's Antworten, Kommentare, und meine empfehlen, die endgültige Fassung der Richtlinie wie folgt:
InformationsquelleAutor der Antwort John_J
Für diejenigen, die sich mit ui-router, meine Antwort ist etwas ähnlich wie Ender2050, aber ich bevorzuge dabei über Zustand, Namen-Tests:
entsprechenden HTML:
InformationsquelleAutor der Antwort GONeale
Keines der oben genannten Richtlinie Vorschläge waren nützlich für mich. Wenn Sie eine bootstrap navbar wie diese
(das könnte eine
$ yo angular
Autostart), dann möchte man hinzufügen.active
zu den Eltern<li>
element Klasse Liste, nicht das element selbst; ich.e<li class="active">..</li>
. Also schrieb ich dies :Nutzung
set-parent-active
;.active
Standard ist also nicht erforderlich eingestellt zu werdenund die Eltern
<li>
element.active
wenn der link aktiv ist. Eine alternative.active
Klasse wie.highlight
einfachInformationsquelleAutor der Antwort davidkonrad
Wichtigste für mich war nicht zu ändern, an alle die bootstrap-Standard-code.
Hier ist es meine Menü-Steuerung ist, dass die Suche für die Menü-Optionen und fügen Sie dann das Verhalten, das wir wollen.
InformationsquelleAutor der Antwort user2599258
hatte das gleiche problem. Hier ist mein Lösung:
InformationsquelleAutor der Antwort Naxmeify
Hier ist meine zwei Cent, das funktioniert gut.
HINWEIS: Dies entspricht nicht childpages (das ist das, was ich brauchte).
Anzeigen:
Controller:
InformationsquelleAutor der Antwort Justus Romijn
Schrieb ich einfach eine Richtlinie für diese.
Verwendung:
Umsetzung:
Tests:
InformationsquelleAutor der Antwort weltschmerz
Die route:
Menü html:
Controller:
Ich das problem hier ist, dass der Menüpunkt ist nur aktiv, wenn die vollständige Seite geladen wird. Wenn das partial view geladen wird, wird das Menü nicht ändern. Jemand weiß, warum es passiert?
InformationsquelleAutor der Antwort Dago MX
Hier ist ein viel besserer Weg, es zu tun
InformationsquelleAutor der Antwort Oluwaseye
InformationsquelleAutor der Antwort Ashish Gupta
Fand ich die einfachste Lösung. nur um zu vergleichen indexOf in HTML
var myApp = angular.module('myApp', []);
InformationsquelleAutor der Antwort NishantVerma.Me