Versuchen Sie, diese vor Ihrem Anruf res.render() in der Route:
res.locals.path = req.path;
res.render('/page');
oder
res.render('/page', { path: req.path });
Dann würden Sie tun müssen, Bündel von if/else-Anweisungen in Ihrer Sicht (wie die obige Lösung vorschlägt).
- if(currentUrl === '/')
li(class='active')
a(href='/') Current Driver Standings
- else
li
a(href='/') Current Driver Standings
ich es jedoch vor, statt diese auf Client-Seite zu tun, meine Vorlage von so viel Logik-Dateien wie möglich frei zu halten:
In Seite Vorlagendatei (diese EJS ist, nicht sicher, wie ein Echo in Jade):
<body data-path="<%= path %>">
dann mit jQuery können Sie den Pfad vom Körper packen und eine aktive Klasse anhängen:
$(function(){
var path = $('body').attr('data-path');
$('nav li a[href='+path+']').parents('li').addClass('active');
});
Update: Sie können auch var path = window.location.pathname
nur statt verwenden Sie es auf ein Attribut Speichern auf body
//no need to save path to <body> tag first:
$(function(){
var path = window.location.pathname;
$('nav li a[href='+path+']').parents('li').addClass('active');
});
Das einzige, was ich dazu sagen würde, ist, dass Sie sich auf den Benutzer mit JS (nicht eine große Sorge in diesen Tagen) verlassen, aber Sie können mit anderen Dingen als Attribute aus irgendeinem Grund und viele hässliche Markup produziert – Jon
enden Gibt es in Ihrem Beispiel auch einen Tippfehler? Ist req.path in EJS verfügbar? Sollte das nicht Ihr Modell sein? – Jon
Entschuldigung, in meinen Routen mache ich res.locals.req = req, damit ich Zugang zu all diesen Informationen habe. Aber ich habe gerade festgestellt, dass Sie auch window.location.pathname verwenden können, anstatt es für Body-Tags zu speichern. – chovy