Использование оператора if в строке литерала шаблона

#javascript

Вопрос:

Я пытаюсь добавить различные операторы IF (), чтобы проверить, существует ли изображение и если одна цена больше другой, но не уверен в правильном синтаксисе при работе с литералами шаблонов.

Вот функция, которая перебирает каждый продукт и выводит название, изображение и цену, просто не знаю, как здесь использовать троичные операторы.

     if(products.length > 0) {
      products.forEach(function(product, index) {

        const productRow = `
        <div class="col-md-3 col-lg-3 col-sm-6 col-xs-6 init">
          <div class="product-item mb-0 wow fadeIn" data-wow-offset="10" data-wow-duration="1s" data-wow-delay="500ms">
            <div class="product-thumb">
              <div class="reveal img-fluid">
                <a href="${product.url}"><img class="img-fluid" src="${product.images[0]}" /></a>
              </div>
            </div>
            <div class="product-content py-2">
              <h3><a href="${product.url}">${product.title}</a></h3>
              <p class="home-price-inline mb-0">
                <span class="js-price" data-default-price="{{ current_variant.price | money }}">${Currency.formatMoney(product.price_min)}</span>
                <s class="ml-0">${Currency.formatMoney(product.compare_at_price)}</s>
              </p>
            </div>
          </div>
        </div>`;

        productRecomendationBody.insertAdjacentHTML('afterbegin', productRow);//afterbegin is the first element directly after the parent element
      });
    }
 

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

1. См. Условный (троичный) оператор . Кроме того, вы можете заранее настроить переменные с необходимыми результатами, а затем использовать их в литерале шаблона.

2. Вы говорите, что пытаетесь добавить if , а затем говорите, что не знаете, как использовать тернарные операторы — что вы хотите?

Ответ №1:

Если вы хотите визуализировать изображение только тогда, когда оно доступно, вы можете сделать что-то подобное.

Обратитесь к этому разделу

 <a href="${product.url}">${product.images[0] ? '<img class="img-fluid" src='${product.images[0]}' />' : ""}</a>
 
 if (products.length > 0) {
  products.forEach(function(product, index) {

    const productRow = `
        <div class="col-md-3 col-lg-3 col-sm-6 col-xs-6 init">
          <div class="product-item mb-0 wow fadeIn" data-wow-offset="10" data-wow-duration="1s" data-wow-delay="500ms">
            <div class="product-thumb">
              <div class="reveal img-fluid">
                <a href="${product.url}">${product.images[0] ? '<img class="img-fluid" src='${product.images[0]}' />' : ""}</a>
              </div>
            </div>
            <div class="product-content py-2">
              <h3><a href="${product.url}">${product.title}</a></h3>
              <p class="home-price-inline mb-0">
                <span class="js-price" data-default-price="{{ current_variant.price | money }}">${Currency.formatMoney(product.price_min)}</span>
                <s class="ml-0">${Currency.formatMoney(product.compare_at_price)}</s>
              </p>
            </div>
          </div>
        </div>`;

    productRecomendationBody.insertAdjacentHTML('afterbegin', productRow); //afterbegin is the first element directly after the parent element
  });
} 

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

1. как было опубликовано, этот код приводит к синтаксической ошибке. Вам нужен вложенный шаблон, чтобы он работал должным образом.

Ответ №2:

Я пытаюсь добавить различных if() операторов

просто не знаю, как использовать тернарные операторы.

С if помощью вы разделяете строку.

 var i = 2;
var row = `${i} second`; 
if (i!==1) 
  row ='s';
row  = " to go";
console.log(row) 

с помощью троицы вы также можете разделить строку и сохранить ее в строке (здесь для ясности разбросано по нескольким строкам, но может быть и одна строка).

 var i = 2;
const row = `${i} second` 
              (i!==1?"s":"") 
              ` to go`;
console.log(row) 

или вы можете поместить троичный в замену, используя ${}

 var i = 2;
const row = `${i} second${i!==1?"s":""} to go`;
console.log(row) 

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

1. Спасибо @mehulcse за ваше предложение, теперь у нас есть рабочее решение для всех необходимых проверок.