EJS Advanced

Om een variabel te tonen in een EJS template gebruiken we volgende notatie:

<%= variable_name %>

Alles wat tussen <% %> staat, wordt door de EJS view engine geparsed. Wanneer <%= gebruikt wordt, zal de waarde de variabel naar de finale HTML render gestuurd worden.

We kunnen zo elke JavaScipt object raadplegen:

<%= name %>
<%= person.name %>
<%= people[0] %>
...

EJS laat ons toe JavaScript te gebruiken om meer controle te hebben over de dynamische inhoud van het template. Tussen <% %> kunnen we JavaScript plaatsen:

<% 
    let firstName = "John";
    let lastName = "Smith";
    let age = Math.random() * 100;
%>

Deze code zal uitgevoerd worden tijdens het parsen van de EJS file. De variabelen hier zijn ook aanspreekbaar in de rest van het template:

<% 
    let firstName = "John";
    let lastName = "Smith";
    let age = Math.random() * 100;
%>

<h1>Hi</h1>
<p>
    My name is <%= firstName %> <%= lastName %> 
    and I'm <%= age %> years old.
</p>

Zo kan je bv. ook een loop toevoegen. Merk op dat we <% %> gebruiken om JavaScript uit te voeren. <%= %> zal de waarde van de statement omzetten naar tekst. Daarom gebruiken we <% voor de for loop en <%= wanneer we i willen tonen.

<% for(let i=1; i<10;i++) {%>
    <%= i %>
<% }; %>

Laten we loopen over een array met forEach. Hiervoor hebben we een functie nodig die iets met de output doet. In JavaScript/TypeScript (zonder EJS) zouden we dit zo doen:

let names = ['george','geoff','jane'];
names.forEach( name => {
    //do something with name
}); 

Lijn 3 zou onze output moeten zijn naar EJS. Daar gaan we dus <%= voor moeten gebruiken. De andere lijnen moeten uitgevoerd worden en plaatsen we tussen <% %>.

Dit wordt dus:

<% 
    let names = ['george','geoff','jane'];
    names.forEach( name => {
%>
    <%= name %>
<% 
    }); 
%>

<%= zal de waarde rechtstreeks omzetten naar een correcte string. Ze zal dus geen rekening houden met HTML tags. Probeer de volgende EJS code:

<% 
    let names = ['george','geoff','jane'];
    names.forEach( t => {
%>
    <%= '<strong>' + t + '</strong><br/>' %>
<% 
    }); 
%>

De output zal zijn:

<strong>george</strong><br/> <strong>geoff</strong><br/> <strong>jane</strong><br/>

Er wordt geen rekening met de tags gehouden, deze worden als strings gerenderd client side.

Door gebruik te maken van <%- ipv <%= wordt wel rekening gehouden met de tags:

<% 
    let names = ['george','geoff','jane'];
    names.forEach( t => {
%>
    <%- '<strong>' + t + '</strong><br/>' %>
<% 
    }); 
%>
  • <% %> voert JavaScript code uit

  • <%= %> geeft de waarde terug als string (HTML Escaped, maw tags zichtbaar client-side

  • <%- %> geeft d waarde terug en laat HTML toe

Je kan <%- ook gebruiken om andere templates te importeren. Bv. als je een header en/of footer template wil toevoegen:

<%- include('header'); %>

Last updated

Was this helpful?