Почему мой модальный компонент не отображает кнопку подтверждения и не перенаправляет события в App.Sevlte?

Привет, я изучаю Svelte и наткнулся на эту проблему. У меня есть кнопка подтверждения с использованием слотов, которые я пытаюсь поместить в свой модальный компонент. Но он не появляется. Также я пытаюсь переслать событие, когда вы нажимаете кнопку Close в модальном компоненте. Но ничего не происходит. В идеале событие должно быть захвачено и выведено на консоль в браузере. Вот мои два компонента

app.svelte

<script>
  import Modal from "./Modal.svelte";
  import Product from "./Product.svelte";
  let modalDisplay = false;
  let products = [
    {
      id: "24",
      title: "cat",
      subtitle: "animal",
    }
  ];
  function eventAddCart(event) {
    console.info(event.detail);
    console.info("---------");
  }

  function eventDelete(event) {
    console.info(event.detail);
  }

  function handleModalClose(event) {
    console.info("=============== = ");
    console.info(event.detail);
  }
</script>

<h1>This is a product</h1>

<!-- createEventDispatcher -->

{#each products as product}
  <Product
    {...product}
    on:add-to-cart = {eventAddCart}
    on:my-delete = {eventDelete}
  />
{/each}

<button on:click = {() => (modalDisplay = true)}>Display modal</button>

{#if modalDisplay}
  <Modal on:close-my-modal = {handleModalClose} >
    <h1 slot = "header">My Markup</h1>
    <!-- <p>This is what is wanted</p> -->
    <!-- <p>Allow me </p> -->
    <button slot = "footer">confirm</button>
  </Modal>
{/if}

<style>
  h1 {
    color: purple;
  }
</style>

Modal.svelte


<script>
  import {createEventDispatcher} from 'svelte';

  const dispatch = createEventDispatcher();
  // export let modalDisplay = false;

  function closeModal(){

    dispatch("close-my-modal");

  }
</script>
<div class = "backdrop" />
<div class = "modal">
  <header>
    <!-- add marked slot here -->
    <slot name = "header" />
  </header>

  <div class = "content">
    <!-- add unmarked slot here -->
    <slot />
  </div>

  <footer>
    <button onclick = {closeModal}>Close</button>
    <slot class = "footer">
    </slot>
  </footer>
</div>

<style>
  .backdrop {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100vh;
    background: rgba(0, 0, 0, 0.75);
    z-index: 10;
  }

  .modal {
    padding: 1rem;
    position: fixed;
    top: 10vh;
    left: 10%;
    width: 80%;
    max-height: 80vh;
    background: white;
    border-radius: 5px;
    z-index: 100;
    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.26);
    overflow: scroll;
  }

  header {
    border-bottom: 4px #c23535;
  }
</style>

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
  1. Вы ставите class вместо name здесь:

    <slot class = "footer">
    </slot>
    

    Так что это просто еще один экземпляр слота default.

  2. Это не обработчик событий Svelte и поэтому не будет работать:

    <button onclick = {closeModal}>
    

    Должно быть on:click.

Спасибо, это решение сработало

Danish Xavier 11.08.2023 11:44

Другие вопросы по теме