Express /EJS — если отображается определенный файл представления, сделайте что-нибудь

#node.js #express #ejs

#node.js #экспресс #ejs

Вопрос:

У меня есть представление, которое:

/views/signup.html

Я хочу, чтобы на странице в моем основном шаблоне макета были разные элементы в зависимости от того, какой вид загружается.

В моем основном файле макета, когда отображается этот конкретный вид, я хочу сделать что-то вроде:

   <% if (ecomHeader) { %>
    <% include includes/signup-nav.html %>
  <% } %>
  <% else { %>
    <% include includes/nav.html %>
  <% } %>
 

Это, очевидно, не работает

 ReferenceError: ../views/layout.html:9
    7| </head>

    8| <body>

 >> 9|   <% if (ecomHeader) { %>

    10|     <% include includes/signup-nav.html %>

    11|   <% } else { %>

    12|     <% include includes/nav.html %>
 

Вы можете это сделать? это так работает?

визуализируйте код:

 ...
let token = createCSRFToken(req);
let ecomHeader = true;
res.render('premium/signup', {
  message: req.flash('signupMessage'),
  token: token,
  ecomHeader: true
});
...
 

Есть экспорт. вещь, которая обертывает это, не уверен, актуально это или нет

Комментарии:

1. res.render('signup', { signup: true }) или signup: false в зависимости от того, кто рендерит?

2. не могли бы вы опубликовать свой код рендеринга?

3. Я просто надеялся, что это поможет

4. вы premium/signup не визуализируете layout.html , поэтому вы не можете передавать переменные layout.html ? может быть, измените структуру регистрации, чтобы включить частичные элементы?

Ответ №1:

В вашем другом условии отсутствуют определенные вещи. Убедитесь, что вы передаете логическое значение signup: true / false из серверной части в свои представления.

 res.render("main-template", {
    signup: true/false
});
 

Затем в вашем html вам нужно сделать это — убедитесь, что вы используете <%- .

 <% if(signup){ %>
   <%- include('includes/signup-nav.html'); %>
 <% } else { %>  
   <%- include('includes/nav.html'); %>
<% } %>
 

Комментарии:

1. Хорошо, я это делаю, но он говорит мне signup is undefined , должен ли я объявлять его как переменную где-то еще?

2. Вы не отображаете views/layout.html . Вы предоставляете премиум / регистрацию. И { message: req.flash('signupMessage'), token: token, signup: true/false, ecomHeader: true } — Регистрация должна быть передана здесь.

3. если вы найдете мое решение полезным, пожалуйста, примите и поддержите 🙂 Спасибо!