Posso usar instruções condicionais com modelos EJS (em JMVC)?

101

e se sim, qual é a sintaxe? Meu objetivo é adicionar um 's' antes da palavra 'comentário' quando houver mais de um. em um modelo jQuery.ejs em um aplicativo JMVC. As seguintes pausas. Não consigo encontrar nenhum documento para condicionais ...

<%=commentsNumber%> comment<% if (commentsNumber > 1) { %> s <% } %>
Regis Zaleman
fonte
Sua sintaxe parece correta e funciona para mim. Tem certeza de que var commentsNumber existe e é um inteiro?
Ryan Crispin Heneise
1
Sim, é estranho que as condicionais não sejam mencionadas nos documentos!
UpTheCreek

Respostas:

171

Para outros que tropeçam nisso, você também pode usar ejs params / props em declarações condicionais:

Arquivo recipes.js:

app.get("/recipes", function(req, res) {
    res.render("recipes.ejs", {
        recipes: recipes
    });
});

Arquivo recipes.ejs:

<%if (recipes.length > 0) { %>
// Do something with more than 1 recipe
<% } %>
Jbird
fonte
3
Você pode, no caso de uma includedeclaração, escrever o inline condicional? Isso está escrevendo <% if (true) { include foo/bar } %>parece um erro. Existe um método semelhante ou é necessário quebrar o includeby <% %>.
kuanb
Obrigado, eu estava procurando por essa resposta antes de tentar.
CTala
Obrigado! Eu estava tentando exibir elementos condicionais de alterações no servidor. Sua resposta me mostrou que eu precisava avaliar tudo no cliente.
buildpax de
161

As condicionais funcionam se estiverem estruturadas corretamente. Encontrei esse problema e descobri.

Para condicionais, a tag anterior elsedeve ser emparelhada com a tag final da anterior, ifcaso contrário, as instruções serão avaliadas separadamente e produzirão um erro.

ERRO!

<% if(true){ %>
   <h1>foo</h1>
<% } %>
<% else{ %>
   <h1>bar</h1>
 <% } %>

Corrigir

<% if(true){ %>
   <h1>foo</h1>
 <% } else{ %>  
   <h1>bar</h1>
<% } %>

espero que isso tenha ajudado.

StanleyZheng
fonte
2
Obrigado !! Isso me prendeu por um tempo.
xblymmx
3
Isso foi incrivelmente útil, pois eu estava tendo um problema em que estava colocando minha elselinha em uma linha diferente, como o primeiro bloco de código que você mencionou. Muito obrigado por incluir esses exemplos !!
Michael Platt
22

EJS parece se comportar de maneira diferente dependendo se você usa {} notação ou não:

Eu verifiquei e a seguinte condição foi avaliada como você esperaria:

<%if (3==3) {%>  TEXT PRINTED  <%}%>
<%if (3==4) {%>  TEXT NOT PRINTED  <%}%>

enquanto este não:

<%if (3==3) %>  TEXT PRINTED  <% %>
<%if (3==4) %>  TEXT PRINTED  <% %>  
Kristóf Aczél
fonte
11
Você esperaria que um único caractere de espaço fizesse algo?
UpTheCreek
22

Sim, você pode usar a instrução condicional com EJS como if else, operador ternário ou até mesmo switch case também

Por exemplo

Operador ternário : <%- role == 'Admin' ? 'Super Admin' : role == 'subAdmin' ? 'Sub Admin' : role %>

Caixa de troca

<% switch (role) {
case 'Admin' : %>
        Super Admin
        <% break;

case 'eventAdmin' : %>
        Event Admin
        <% break;

case 'subAdmin' : %>
        Sub Admin
        <% break;

} %>
Om Sharma
fonte
16

Você também pode usar a else ifsintaxe:

<% if (x === 1) { %>
    <p>Hello world!</p>
<% } else if (x === 2) { %>
    <p>Hi earth!</p>
<% } else { %>
    <p>Hey terra!</p>
<% } %>
pzrq
fonte
4
o que você precisa destacar aqui é que o colchete de fechamento deve ser definitivamente usado na mesma linha que else / else if
Paulo
1

Eu sei que esta é uma resposta um pouco atrasada,

você pode usar as instruções if e else em ejs como segue

<% if (something) { %>
   // Then do some operation
<% } else { %>
   // Then do some operation
<% } %>

Mas há outra coisa que quero enfatizar é que, se você usar o código dessa forma,

<% if (something) { %>
   // Then do some operation
<% } %>
<% else { %>
   // Then do some operation
<% } %>

Isso produzirá um erro.

Espero que isso ajude alguém

Achintha Isuru
fonte