Как использовать javascript для динамического добавления контента в список в меню корзины - PullRequest
0 голосов
/ 30 апреля 2020

Здравствуйте, я новичок в javascript, и мой вопрос - я создаю веб-сайт электронной коммерции для изучения веб-разработки. И я в настоящее время застрял с javascript, как я могу создать систему, которая, когда пользователь добавляет в корзину и открывает модальную корзину. Запрос Get с использованием fetch отправлен на мой сервер, и я могу динамически заполнить список bootstrap4 информацией с моего сервера. У меня уже есть API и сервер для извлечения данных, но я застрял в том, чтобы понять, как динамически показывать элементы пользовательской корзины в модальной корзине и сделать каждый элемент кликабельным, добавьте идентификатор из моего API. Пожалуйста, любой пример кода поможет.

это код html для модальной боковой панели корзины для покупок

<!-- Shopping Cart -->
<div class="modal fixed-right fade" id="modalShoppingCart" tabindex="-1" role="dialog" aria-hidden="true">
    <div class="modal-dialog modal-dialog-vertical" role="document" >

      <!-- Full cart (add `.d-none` to disable it) -->
      <div class="modal-content" >

        <!-- Close -->
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <i class="fe fe-x" aria-hidden="true"></i>
        </button>

        <!-- Header-->
        <div class="modal-header line-height-fixed font-size-lg">
          <strong class="mx-auto">Your Cart (2)</strong>
        </div>

        <!-- List of products in cart 1 -->
        <ul class="list-group list-group-lg list-group-flush">
          <li class="list-group-item">
            <div class="row align-items-center">
              <div class="col-4">

                <!-- Image -->
                <a href="./product.html">
                  <img class="img-fluid"   src="/static/assets/img/products/product-6.jpg" alt="...">
                </a>

              </div>
              <div class="col-8">

                <!-- list rpoducts in cart -->
                <p class="font-size-sm font-weight-bold mb-6">
                  <a class="text-body" href="./product.html" >Product 1</a> <br>
                  <span class="text-muted">$49.00</span>
                </p>

                <!--Footer -->
                <div class="d-flex align-items-center">

                  <!-- Select -->
                  <select class="custom-select custom-select-xxs w-auto">
                    <option value="1">1</option>
                    <option value="1">2</option>
                    <option value="1">3</option>
                  </select>

                  <!-- Remove -->
                  <a class="font-size-xs text-gray-400 ml-auto" href="#!">
                    <i class="fe fe-x"></i> Remove
                  </a>

                </div>

              </div>
            </div>
          </li>

          <!--products in the cart 2-->
          <li class="list-group-item">
            <div class="row align-items-center">
              <div class="col-4">

                <!-- Image -->
                <a href="./product.html">
                  <img class="img-fluid" src="/static/assets/img/products/product-10.jpg" alt="...">
                </a>

              </div>
              <div class="col-8">

                <!-- liat rpoducts in cart -->
                <p class="font-size-sm font-weight-bold mb-6">
                  <a class="text-body" href="./product.html" >Product 2</a> <br>
                  <span class="text-muted">$29.00</span>
                </p>

                <!--Footer -->
                <div class="d-flex align-items-center">

                  <!-- Select -->
                  <select class="custom-select custom-select-xxs w-auto">
                    <option value="1">1</option>
                    <option value="1">2</option>
                    <option value="1">3</option>
                  </select>

                  <!-- Remove -->
                  <a class="font-size-xs text-gray-400 ml-auto" href="#!">
                    <i class="fe fe-x"></i> Remove
                  </a>

                </div>

              </div>
            </div>
          </li>
        </ul>

      </div>


        <!-- Subtotal Footer -->
        <div class="modal-footer line-height-fixed font-size-sm bg-light mt-auto">
          <strong>Subtotal</strong> <strong class="ml-auto" id="bagTotal">$</strong>
        </div>

        <!-- Buttons -->
        <div class="modal-body">
          <a class="btn btn-block btn-dark" href="/checkout">Continue to Checkout</a>
          <a class="btn btn-block btn-outline-dark" href="/bag">View Bag</a>
        </div>

корзина html выглядит при нажатии enter image description here как можно Я использую javascript, чтобы заполнить этот список как можно большим количеством элементов из моей базы данных, сохраняя при этом эту структуру

, и это структура данных для корзины пользователей, используемой в моем API:

{  
 "session": "test-session",
 "cart total": 2,
  "products": [{
            "product_id": 1,
             "name": "product 1",
              "price": "$20",
               "image": "example.com/pics/product1.jpg"},
                   {
            "product_id": 2,
             "name": "product 2",
              "price": "$30",
               "image": "example.com/pics/product3.jpg"},
                     {
            "product_id": 3,
             "name": "product 3",
              "price": "$50",
               "image": "example.com/pics/product3.jpg"}]

1 Ответ

0 голосов
/ 30 апреля 2020

Здесь есть несколько вопросов, поэтому я просто дам вам основы ниже. Я предполагаю, что вы используете asyn c выше, чтобы убедиться, что у вас есть данные, доступные перед обновлением DOM.

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

Используя базис c для l oop, мы l oop над продуктами в данных, и для каждого элемента создаем новый элемент li.

Мы устанавливаем атрибут данных для каждого li, называемый product_id, для легкого отслеживания, когда мы нажимаем на элементы списка. Если вы не уверены, что такое атрибут данных, осмотрите элемент li, который мы создали ниже, и вы увидите, что на нем есть product-id = "1" et c.

Во время l oop, мы также добавляем прослушиватель событий к каждому элементу li, и при нажатии мы предупреждаем атрибут данных, который мы установили выше. В этом случае вы можете делать все, что захотите, а с помощью product_id вы можете легко фильтровать / обновлять ваши данные.

const listEl = document.getElementById('js-list');
let yourData = {
  products: [{
    product_id: 1,
    price: '$20',
  },
  {
    product_id: 2,
    price: '$25',
  },
  {
    product_id: 3,
    price: '$30',
  },
]};

// There are a few ways to loop the products object, I am just going to a simple for loop
for (let i = 0; i < yourData.products.length; i++) {
  // Create the element
  let el = document.createElement("li");
  // we can use datasets to track clicks
  el.setAttribute('product-id', yourData.products[i].product_id);
  // Add event listeners
  el.addEventListener('click', () => {
    // getting the dataset value.
    let itemClicked = el.getAttribute('product-id');
    alert('You clicked on product ' + itemClicked);
  });
  // Set the content
  el.textContent = yourData.products[i].price;
  // Add the list item to the dom
  listEl.appendChild(el);
}
<ul id="js-list"></ul>

Надеюсь, это поможет вам.

...