【问题标题】:how to include a template with parameters in EJS?如何在 EJS 中包含带有参数的模板?
【发布时间】:2015-05-25 15:14:34
【问题描述】:

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

<% include partials/spider-chart.ejs %>

但是我需要在 ejs 中传递一些参数来区分图表。

最好的方法是什么?

【问题讨论】:

  • 你检查过 Zubair 的答案吗?也许你应该重新考虑哪一个是被接受的。

标签: ejs


【解决方案1】:

这是最好的解决方法,在渲染基本 ejs 文件时仅将视图文件名作为上下文传递。

/base.ejs:

<html>
    <%- include(content) %>
</html>

/extra.ejs:

<div> some content which is to be added in base ejs file </div>

/controller.js:

res.render('base', { content: 'extra' })

【讨论】:

    【解决方案2】:

    你可以传递单个以及多个数据,这里是怎么做的

    在渲染函数中

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

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

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

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

    在部分视图中

    像这样传递数据

    &lt;%- include('partials/logout', {name='triyon'}) %&gt;

    然后像我们上面那样访问它

    &lt;h2&gt; logged out &lt;%= name %&gt; &lt;/h2&gt;

    【讨论】:

    • 谢谢。这正是我想要的!
    【解决方案3】:

    @Naeem Shaikh 解决方案有效。 尽管include 还为您提供了更直观的方式来包含部分模板并将上下文变量传递给documention section of ejs

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

    【讨论】:

    • 如果我试试这个,`
      ` 我得到ENOENT: no such file or directory, open '/(folder/index.ejs'
    • 您需要将参数括在括号中。 &lt;div&gt; &lt;%- include ('folder/index' , {user: user}); %&gt; &lt;/div&gt;
    • 这确实应该是公认的答案。使用全局变量的另一种方式有 sphagetti 代码的味道。它缺乏封装并且依赖于假设(例如,var 数据不用于其他任何事情)
    • 我收到“找不到包含包含文件”的错误:( .&lt;%- include ('partials/navbar.ejs' , if(locals.login &amp;&amp; login) {login:true }); %&gt;
    • 也许我参加聚会迟到了,但我发现使用include 模板获得foreach 的唯一方法是使用&lt;% include user/show %&gt; 阅读here
    【解决方案4】:

    我认为您想使用相同的 partial ejs 模板呈现两个不同的图表,只需提供不同的数据(在主 ejs 文件中)。

    您可以只定义一个变量,将其分配给第一个图表将使用的data,而不是包含chart.ejs 文件,再次更改data,并包含部分ejs 文件(图表.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 %>
    

    您的 spider-chart.ejs 文件可能会使用 data

    spider-chart.ejs

        <li>
            <%= data %> // just an example
        </li>
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-14
      • 2017-02-17
      • 2015-02-21
      • 2011-11-16
      • 1970-01-01
      • 2013-04-22
      相关资源
      最近更新 更多