DevGang
Авторизоваться

Создание вкладок в Svelte

Мне часто нужно написать какой-то код для отображения нескольких страниц в одном месте: представьте себе панель конфигурации с несколькими подпанелями. Естественный способ кодирования — использование вкладок.

В этом уроке я буду использовать Svelte для написания простого приложения с двумя вкладками, которое можно легко расширить для управления большим количеством вкладок.

Как обычно, давайте начнем новый проект Svelte с использованием Esbuild, следуя моему предыдущему посту Настройка проекта Svelte с помощью ESBuild.

Вы также можете следить за моей страницей на Github или в этом Svelte Repl.

В app.svelte будет вся логика для управления вкладками.

Мы добавим еще 2 файла для демонстрации вкладок:

  1. t_identity.svelte: главная вкладка (отображается по умолчанию)
  2. t_password.svelte: еще одна вкладка, в которой будет повторно использоваться наш инструмент выбора пароля из моего последнего поста. Обучение: Создание пароля в Svelte.

Содержимое этих двух файлов не имеет отношения к этому руководству. Наше основное внимание будет сосредоточено на файле app.svelte:

<script>
    import Identity from "./t_identity.svelte";
    import Password from "./t_password.svelte";

    let tabs = [
        { name: "Identity", comp: Identity },
        { name: "Password", comp: Password },
    ];

    let cur = tabs[0];
</script>

Мы начинаем раздел скриптов с импорта двух наших вкладок: Identity и Password.

Затем мы добавляем их в массив tabs. Мы используем простой объект с одним полем для имени и одним полем для хранения компонента. Поэтому, если мы хотим добавить больше вкладок, нам нужно всего лишь импортировать компонент и добавить его в tabs массива.

Наконец, мы объявляем переменную cur для хранения текущей выбранной вкладки: по умолчанию мы будем использовать первую в массиве. Таким образом, cur будет содержать объект с именем вкладки и отображаемым компонентом.

Хорошо, это все, что касается JavaScript-части, давайте посмотрим HTML-часть:

{#each tabs as tab}
    <button class:selected={cur === tab} on:click={() => (cur = tab)}>
        {tab.name}
    </button>
{/each}

<main>
    <svelte:component this={cur.comp} />
</main>

Мы конструируем вкладки как кнопки с помощью цикла #each, перебирая вкладки массива, объявленные выше:

  • class:selected={cur === tab} повлияет на класс, выбранный для этой кнопки, если это текущая вкладка (cur), поэтому мы можем стилизовать выбранную вкладку.
  • on:click={() => (cur = tab)} будет реагировать на нажатие кнопки изменением текущей выбранной вкладки.
  • {tab.name} будет именем внутри кнопки.

Важный код находится в основном разделе с директивой svelte:comComponent.

Эта директива Svelte может отображать любой компонент, который мы ей даем. Мы используем тот факт, что мы сохранили текущую вкладку в переменной cur, точнее, компонент находится в поле comp нашего простого объекта.

Итак, <svelte:comComponent this={cur.comp} /> отобразит вкладку в этом месте.

Вот и все! Теперь у нас есть способ управлять вкладками с помощью Svelte, остальное — это просто стили CSS. Весь исходный код доступен на Github.

Источник:

#JavaScript
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу