2014-11-21 6 views
5

Ich möchte eine 'aktuelle' Klasse auf jedem meiner Navigationslinks rendern abhängig davon, auf welcher Seite ich in meiner layout.ejs Vorlage bin.Node.js, Express, EJS - Aktive Klasse auf der aktuellen Seite in der Navigation

Derzeit meine ausdrückliche Controller Index sieht wie folgt aus:

// About 
exports.about = function(req, res) { 
    res.render('content/about.ejs', { 
     title: 'About' 
    }); 
}; 

Und in meinem layout.ejs habe ich die folgenden, die ich dynamisch gemacht werden möchte.

<ul class="nav" id="nav"> 
    <li><a href="/">Home</a></li> 
    <li class="current"><a href="/about">About</a></li> 
    <li><a href="/">Contact</a></li> 
</ul> 

Irgendwelche Ideen, wie man das erreicht?

Antwort

16

Sie könnten eine page_name: 'about' in den res.render Daten und dann in der Vorlage so etwas wie die folgenden:

<li <% if (page_name === 'about') { %>class="current" <% } %> ><a href="/about">About</a></li> 

habe ich die Syntax nicht testen, aber das ist das Wesentliche.

+1

Vielen Dank. Es ist in der Tat richtig, einschließlich der Syntax. Sehr geschätzt. Ich habe noch kein Wahlrecht, also akzeptiere ich die Antwort. – dinkco

+0

Gibt es eine Möglichkeit, 'page_name' automatisch von' app.get() ''zu erhalten? – jeff

+0

'req.path' ist wahrscheinlich am nächsten. Siehe [here] (https://expressjs.com/en/api.html#req.path) für Dokumente. Sie können die Schrägstriche leicht aus dem Pfad entfernen, um etwas mit dem Seitenname zu erhalten. Aber geschachtelte Pfadnamen (zB '/ about/fred') würden dann nicht ganz richtig funktionieren. Sie könnten wahrscheinlich die Schrägstriche in Unterstriche ändern, um eine Konvention zu erstellen, bei der die unterstrichene Version von req.path (zB 'req.path.replace (/ \ // g, '_')') einen Seitennamen darstellt – thataustin