【问题标题】:How to pass Express.js variable to Jade/Pug unbuffered code?如何将 Express.js 变量传递给 Jade/Pug 无缓冲代码?
【发布时间】:2017-10-08 21:47:28
【问题描述】:

我有一个带有以下代码的 index.js:

var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index',{
      "title":"Homepage",
      "navIndex":"reg",
      "navItems":[
         {"title":"Home", "link":"/" },
         {"title":"Register", "link":"/reg"}
      ]
  });
});

module.exports = router;

我有 index.pug:

doctype html
html
    head
        title Welcome!
        link(rel='stylesheet' href='css/materialize.min.css')
        link(rel='stylesheet' href='css/style.css')
        script(src='js/jquery-3.2.1.min.js')
        script(src='js/materialize.min.js')
    body
        block content
        nav
            div(class='nav-wrapper')
                a(href='#' class='brand-logo' class='right') Logo
                ul(id='nav-mobile' class='left hide-on-med-and-down')
                -
                    var navItems = #{navItems}

                    for(x = 0; x < navItems.length; x++)
                        li
                            a(href=navItems[x].link) navItems[x].title

由于某种原因,我不断收到“意外的块内容”错误。

我已尝试调整间距,但似乎无法正常工作。我查看了有关无缓冲代码的文档,但我只是不确定如何将 navItems 对象从 index.js 传递到 pug 文件的无缓冲代码部分。我假设您像我一样定义一个变量 ex .var navItems = #{navItems}。有没有这方面的具体文档?如果没有,我到底做错了什么?提前致谢。

编辑:

更新的 index.pug 如下。但它会逐字输出“navItems[x].title”,而不是变量的值。

doctype html
html
    head
        title Welcome!
        link(rel='stylesheet' href='css/materialize.min.css')
        link(rel='stylesheet' href='css/style.css')
        script(src='js/jquery-3.2.1.min.js')
        script(src='js/materialize.min.js')
    body
        nav
            div(class='nav-wrapper')
                a(href='#' class='brand-logo' class='right') Logo
                ul(id='nav-mobile' class='left hide-on-small-only')
                    - for(x = 0; x < navItems.length; x++)
                    li
                        a(href=navItems[x].link) navItems[x].title

【问题讨论】:

  • 我认为不需要这条线var navItems = #{navItems}。您可以删除该行并查看它是否可以解决您的问题吗?
  • 这只是给我“意外的块内容”错误,我不明白为什么。

标签: javascript node.js pug


【解决方案1】:

您的index.pug 文件中有block 语句,这表明该文件通常打算被其他模板继承,这些模板将为您的block content 提供内容。

我认为从您的 index.pug 中删除 block content 语句应该可以解决您的错误。或者您可以为您的block content 提供默认内容。

你可以read more here about Template Inheritance in Pug

关于您更新的代码,我认为 #{variableName} 语法仅适用于属性(即在属性插值中)。

当作为内容的一部分使用时,您可以使用以下任意一种:

a(href=navItems[x].link)= navItems[x].title
a(href=navItems[x].link) #{navItems[x].title}

现在,关于 for 循环的缩进差异,如果您使用 Pug 循环,即在开头没有破折号 (-),则需要适当的缩进。

当您在行首添加破折号 (-) 时,该行将被视为纯 javascript,然后在大多数情况下您无需缩进下一行。

【讨论】:

  • 这是“意外块”错误的问题。但是,我对缩进感到困惑。就好像帕格在这些东西上没有遵循自己的规则。第一个无缓冲代码示例在与破折号相同的行上显示了 for() 循环,中间有一个空格。第二个示例(未缓冲的块代码)显示了第一行代码的缩进,然后第二行不缩进。我将在我的帖子中添加一个编辑,显示我目前在 index.pug 上的内容。
  • @RickYoder 我已经更新了我的答案。请检查它是否能解释您的问题。
  • 很抱歉这么晚才回复您。我想通了并且能够让它工作。感谢您的回答!
猜你喜欢
  • 2016-10-28
  • 2020-04-16
  • 1970-01-01
  • 1970-01-01
  • 2017-05-22
  • 2021-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多