Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在Express中将菜单渲染为Jade视图部分_Node.js_View_Menu_Express_Pug - Fatal编程技术网

Node.js 在Express中将菜单渲染为Jade视图部分

Node.js 在Express中将菜单渲染为Jade视图部分,node.js,view,menu,express,pug,Node.js,View,Menu,Express,Pug,我在概念化如何使用Jade view partials在Express应用程序中呈现活动状态的菜单时遇到问题 我有这样的想法: ul.menu li a(href='/some/route').active li a(href='/another/route') 我希望将.active类应用于当前路由,以便我的CSS可以呈现活动的UI状态 当我用PHP编写时,这将通过一些复杂的if/else语句链来实现,但我假设有一种更优雅的方法。我错过了什么?杰德对路线一无所知。我不

我在概念化如何使用Jade view partials在Express应用程序中呈现活动状态的菜单时遇到问题

我有这样的想法:

ul.menu
  li
    a(href='/some/route').active
  li
    a(href='/another/route')
我希望将
.active
类应用于当前路由,以便我的CSS可以呈现活动的UI状态


当我用PHP编写时,这将通过一些复杂的
if/else
语句链来实现,但我假设有一种更优雅的方法。我错过了什么?

杰德对路线一无所知。我不认为有任何方法可以以这样或那样的形式避免if/else

在Express中,只需以本地身份通过路线:

res.render('my_view', {
  current: 'current/url'
});
在视图中,拥有一系列菜单链接,并执行以下操作:

ul.menu
  for each item in links
    li
      if (item.url == current)
         a(href=item.url).active
      else
         a(href=item.url)

我的解决方案与Danmacrough的类似,但我觉得有点整洁

我使用中间件将url保存为所有请求的局部变量。确保这在你的路线之前

app.use(function(req, res, next) {
  res.locals.url = req.url;
  next();
});
我的菜单翡翠模板如下所示

ul
  each link in links
    li
      a(href=link.url, class=link.url === url && 'active')= link.name

将var传递给每个视图有点疯狂,您可以尝试使用dynamic helper来修复它