126

如果是,语法是什么?我的目标是在有多个评论时在“评论”一词前面加上一个“s”。在 JMVC 应用程序的 jQuery.ejs 模板中。以下休息。我找不到任何条件文档...

<%=commentsNumber%> comment<% if (commentsNumber > 1) { %> s <% } %>
4

8 回答 8

207

如果条件结构正确,条件就可以工作,我遇到了这个问题并想通了。

对于条件句,之前的标签else必须与前一个的结束标签配对,if否则语句将单独评估并产生错误。

错误!

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

正确的

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

希望这有帮助。

于 2014-07-22T01:49:03.427 回答
184

对于其他偶然发现的人,您还可以在条件语句中使用 ejs 参数/道具:

recipes.js 文件:

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

recipes.ejs 文件:

<%if (recipes.length > 0) { %>
// Do something with more than 1 recipe
<% } %>
于 2013-01-07T17:37:49.333 回答
33

是的,您可以在 EJS 中使用条件语句,例如 if else 、三元运算符甚至 switch case

例如

三元运算符<%- role == 'Admin' ? 'Super Admin' : role == 'subAdmin' ? 'Sub Admin' : role %>

开关盒

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

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

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

} %>
于 2017-07-14T09:46:53.967 回答
23

根据您是否使用 { } 符号,EJS 的行为似乎有所不同:

我已经检查并按照您的预期评估了以下条件:

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

而这个没有:

<%if (3==3) %>  TEXT PRINTED  <% %>
<%if (3==4) %>  TEXT PRINTED  <% %>  
于 2012-03-09T13:04:02.443 回答
18

您还可以使用else if语法:

<% if (x === 1) { %>
    <p>Hello world!</p>
<% } else if (x === 2) { %>
    <p>Hi earth!</p>
<% } else { %>
    <p>Hey terra!</p>
<% } %>
于 2016-03-22T05:07:56.713 回答
7

我知道这是一个有点晚的答案,

您可以在 ejs 中使用 if 和 else 语句,如下所示

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

但还有一点我要强调的是,如果你这样使用代码,

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

它会产生错误。

希望这对某人有帮助

于 2019-12-14T19:28:22.053 回答
1

只要使代码更短,您就可以使用 ES6 功能。同样的事情可以写成

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

并且Template可以被渲染为相同的!

<%if (recipes.length > 0) { %>
// Do something with more than 1 recipe
<% } %>

于 2020-09-01T14:50:32.593 回答
1

例如,将 javascript(for 循环)嵌入到我们的 ejs 模板中的一个简单而通用的规则,我们可以遵循以下规则:

  1. 首先在 ejs 模板中编写您的 javascript 代码,就像您通常在 javascript 中编写的那样。

  2. 将 <% 放在开头,将 %> 放在每个纯 JavaScript 行的末尾。

例如:

if (num%2===0) {
    <p> this is an even number</p>
} else { 
<p> this is an odd number</p>
}

所以现在我们必须把 ejs 语法放在每一行:

 <% if (num%2===0) {%>
    <p> this is an even number</p>
<%} else { %>
<p> this is an odd number</p>
<%}%>
于 2022-02-01T08:38:14.243 回答