Подтвердить что ты не робот

Jade: изменение активного элемента меню в родительском шаблоне

У меня есть панель навигации в моем родительском шаблоне нефрита, и я хотел бы выделить элемент, который в настоящее время отображается. Поэтому, если я на странице блога,

ul
  li Home
  li.active Blog
  li Contact Us
  li About

Не копируя структуру навигационной панели в каждый дочерний шаблон, существует ли способ, чтобы родительский шаблон отображал, какую страницу он распространяется, и применяет класс active соответственно?

4b9b3361

Ответ 1

parent.jade

doctype 5

html
  block link
    -var selected = 'home'; //default

  -var menu = { 'home': '/home', 'blog': '/blog', 'contact': '/contact' };

  body
    nav
      ul
        each val, key in menu
          li
            if selected === key
              a.selected(href=val, title=key)= key
            else
              a(href=val, title=key)= key

child.jade

extends parent

block link
  -var selected = 'blog';

Ответ 2

Здесь более простой способ:

Используйте это в своем layout.jade(где nav - это имя активной страницы. nav = 'about' например)

ul(class="#{nav}")
  li.home Home
  li.blog Blog
  li.contact Contact Us
  li.about About

Затем укажите, что это ваш CSS:

ul.home li.home,
ul.blog li.blog,
ul.contact li.contact,
ul.about li.about {
    color: red;
}

Единственное правило CSS, которое будет применяться, - это тот, чей класс ul существует. Вам нужно будет передать переменную nav, равную 'about', 'home', 'contact' или 'blog' в зависимости от того, на какой странице вы находитесь.

Ответ 3

Используйте Текущий объект с тройным выражением. Все в документации.

Вы можете использовать свойства объекта для создания своего активного меню. Если вы хотите использовать папки в своем навигационном меню (версия Jade):

ul(class="nav-menu")
            li: a(class="#{ current.path[0] === 'index' ? 'active' : '' }", href="/") home
            li: a(class="#{ current.path[0] === 'about' ? 'active' : '' }", href="/about/") about

Ответ 4

Хорошо, выше решение очень понятно, но если кто-то ищет больше элементов управления над меню, тогда доступен модуль для node.js. Используйте это, и у вас будет полный контроль над меню.

Случай использования: когда меню видны на основе ролей

https://www.npmjs.com/package/active-menu