how to include a template with parameters in EJS?

后端 未结 4 2210
无人共我
无人共我 2020-12-09 14:39

As a real beginner in EJS, I have two charts in my html page, so I want to use my partial twice:

<% include partials/spider-chart.ejs %>
相关标签:
4条回答
  • 2020-12-09 15:10

    I think you want to render two different charts using same partial ejs template, just by providing different data(within the main ejs file).

    You can just define a variable, which will be assigned to the data, which the first chart will use, than include the chart.ejs file, again change the data, and include the partial ejs file(chart.ejs) again, so now you have two files which can use same variable(data), but can plot different chart based on value assigned to data.

    For Example:

    <% 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 %>
    

    where your spider-chart.ejs file could be something which will use data

    spider-chart.ejs

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

    here, as you use data, the data variable accessed by both charts will be different because you are reassigning values for data before every chart.

    0 讨论(0)
  • 2020-12-09 15:12

    This is the best workaround by just passing the view file name as a context while rendering the base ejs file.

    /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' })
    
    0 讨论(0)
  • 2020-12-09 15:20

    You can pass single as well as multiple data here is how to do it

    In render funtions

    We can pass multiple data as an object like this

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

    And then can access the data inside account using ejs simple template tags like this

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

    In Partial views

    Pass the data like this

    <%- include('partials/logout', {name='triyon'}) %>

    And access it like we did above

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

    0 讨论(0)
  • 2020-12-09 15:37

    @Naeem Shaikh solution works. Though include also gives you more intuitive way of including a partial template and also passing context variables to that as found in documention section of ejs.

    <ul>
      <% users.forEach(function(user){ %>
          <%- include('user/show', {user: user}); %>
      <% }); %>
    </ul>
    
    0 讨论(0)
提交回复
热议问题