2014-11-21 3 views
5

Я бы хотел отобразить «текущий» класс на каждой из моих навигационных ссылок в зависимости от того, на какой странице я включен в моем шаблоне layout.ejs.Node.js, Express, EJS - активный класс на текущей странице в навигации

В настоящее время мой экспресс индекс контроллер выглядит следующим образом:

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

И в моих layout.ejs у меня есть следующие, которые я хотел бы быть вынесено динамически.

<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> 

Любые идеи о том, как этого достичь?

ответ

16

Вы могли бы включать page_name: 'about' в данных res.render, а затем в шаблоне что-то вроде:

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

Я не проверял синтаксис, но это суть.

+1

спасибо. Это действительно правильно, включая синтаксис. Очень признателен. У меня пока нет полномочий голоса, поэтому я просто согласен с ответом. – dinkco

+0

Любой способ получить 'page_name' автоматически из ввода' app.get() '? – jeff

+0

'req.path', вероятно, самая близкая вещь. См. [Здесь] (https://expressjs.com/ru/api.html#req.path) для документов. Вы можете легко вырезать косые черты с пути, чтобы получить что-то близкое к page_name. Но имена вложенных путей (например, '/ about/fred') не будут работать совершенно правильно. Вероятно, вы могли бы изменить слэши на символы подчеркивания, чтобы создать соглашение, в котором подчеркнутая версия req.path (например, 'req.path.replace (/ \ // g, '_')') представляет имя страницы – thataustin

Смежные вопросы