Используйте миксины данные в виде массива объектов
Если меню фиксированной вложенности можно сделать так
mixin main-menu-submenu(data)
ul.main-menu-submenu&attributes(attributes)
each item in data
li.main-menu-submenu__item
a(href="#{item.url}")= item.title
mixin main-menu(data)
nav.main-menu.js-link-sroll&attributes(attributes)
ul
each item in data
- var itemClasses = ['main-menu__item']
//- Доп класс для пунктов с подменю
if (item.submenu !== false)
- itemClasses.push(itemClasses[0] + '_dropdown')
li(class=itemClasses)
a(href="#{item.url}").main-menu__link= item.title
if (item.submenu !== false)
.main-menu__submenu
+main-menu-submenu(item.submenu)
И примерно такой структурой данных
{
"menu": [
{
"title": "Level 1 title 1",
"url": "#url1",
"submenu": [
{
"title": "Submenu item 1",
"url": "url2"
},
{
"title": "Submenu item 2",
"url": "url3"
}
]
},
{
"title": "Level 1 title 2",
"url": "#url4",
"submenu": false
}
]
}
Если неизвестна максимальная вложенность то можно использовать рекурсию
Как написать mixin для Jade/Pug?