如何在EJS中包含带参数的模板?

Ork*_*zen 31 ejs

作为EJS的真正初学者,我在html页面中有两个图表,所以我想使用我的部分两次:

<% include partials/spider-chart.ejs %>
Run Code Online (Sandbox Code Playgroud)

但我需要在ejs中传递一些参数来区分图形.

什么是最好的方法?

Zub*_*lam 70

@Naeem Shaikh解决方案有效.虽然include也为您提供了更直观的方式来包含部分模板,并将上下文变量传递给ejs的文档部分中的变量.

<ul>
  <% users.forEach(function(user){ %>
      <%- include('user/show', {user: user}); %>
  <% }); %>
</ul>
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案.使用全局变量的另一种方式具有sphagetti代码的气味.它缺乏封装并依赖于假设(例如,var数据不用于其他任何东西) (9认同)

Nae*_*ikh 31

我想你想使用相同的部分 ejs模板渲染两个不同的图表,只需提供不同的数据(在主ejs文件中).

你可以定义一个变量,它将被分配给data第一个图表将使用的变量,而不是包含chart.ejs文件,再次更改data,并再次包含部分ejs文件(chart.ejs),所以现在你有两个文件可以使用相同的变量(数据),但可以根据分配给的值绘制不同的图表data.

例如:

<% var data= 'data to be used by first chart(parameter)'; %>
<% include partials/spider-chart.ejs %>

// re-initializing data for second chart
<% data= 'data to be used by second chart(parameter)'; %>
<% include partials/spider-chart.ejs %>
Run Code Online (Sandbox Code Playgroud)

你的spider-chart.ejs文件可能会使用的地方data

蜘蛛chart.ejs

    <li>
        <%= data %> // just an example
    </li>
Run Code Online (Sandbox Code Playgroud)

在这里,当您使用数据时,两个图表访问的数据变量将不同,因为您在每个图表之前重新分配数据的值.


Had*_*Mir 9

您可以在此处传递单个和多个数据是如何做到的

在渲染函数中

我们可以像这样将多个数据作为一个对象传递

app.get("/account", function(req, res) {
  res.render("account", {
    name: 'Jon Snow',
    age: 35
  });
});
Run Code Online (Sandbox Code Playgroud)

然后可以account使用像这样的 ejs 简单模板标签访问里面的数据

<h2> hello <%= name %> </h2> <p> your age is <%= age %> </p>

在部分视图中

像这样传递数据

<%- include('partials/logout', {name='triyon'}) %>
Run Code Online (Sandbox Code Playgroud)

并像我们上面那样访问它

<h2> logged out <%= name %> </h2>

  • `{name='triyon'}` 应该是 `{name:'triyon'}` (2认同)