Планировщик задач — To‑Do List

Создание динамических и отзывчивых веб-интерфейсов больше не требует сложного кода и долгой разработки. С современными фреймворками, такими как Vue.js, реализация интерактивных компонентов становится интуитивно понятной и быстрой. Этот планировщик задач (ToDo List) — наглядное тому подтверждение. Vue берет на себя всю работу по реактивности: когда вы добавляете или отмечаете задачу, интерфейс мгновенно обновляется без перезагрузки страницы, создавая плавный и современный пользовательский опыт.

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

Список задач

В работе {{ calcCurrent }}
Выполнено {{ calcDone }}

Пока задач нет

В работе

Выполнено

Внимание! Представленный код — это готовый компонент, но для его работы на странице должен быть установлен и подключен фреймворк Vue. Если вы начинающий разработчик, просто добавьте строку
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
в раздел <head> вашего HTML, и всё заработает.

Разбор кода компонента

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

HTML-структура (Vue Template)

Этот шаблон определяет, как выглядит наш планировщик. Vue-директивы (атрибуты, начинающиеся с v-) делают его «живым».

  1. v-cloak: Прячет нескомпилированные шаблоны до загрузки Vue, чтобы пользователь не видел «сырых» Mustache-тегов {{ }}.
  2. v-if / v-else: Условный рендеринг. Заголовок «Список задач» показывается только когда список пуст. Как только появляется первая задача, показывается блок с счетчиками app-info.
  3. v-model="task": Создает «двустороннюю привязку» между полем ввода и данными в скрипте. Когда пользователь печатает, значение переменной task автоматически обновляется.
  4. @keyup.enter и @click: Обработчики событий. Vue реагирует на нажатие клавиши Enter или клик по кнопке и вызывает соответствующий метод addItem.
  5. v-for="task in tasks": Цикл для отрисовки списка задач. Для каждого элемента в массиве tasks создается блок HTML.
  6. v-bind:key="task.text": Помогает Vue однозначно идентифицировать каждый узел в списке для корректного обновления.
  7. v-model="task.isActive": Связывает чекбокс со свойством isActive каждой задачи. При клике состояние автоматически меняется в данных, что сразу влияет на отображение (задача перемещается между «В работе» и «Выполнено»).

Стили (CSS)

Стили обеспечивают адаптивный и визуально приятный интерфейс.

  1. Адаптивность: Используются современные единицы измерения, такие как clamp() и min(), чтобы компонент хорошо выглядел на всех устройствах — от мобильных телефонов до десктопов.
  2. CSS Grid и Flexbox: Эти технологии макета используются для создания структурированного, гибкого и выровненного дизайна.
  3. Состояния элементов: Псевдокласс :focus-visible улучшает доступность, а селектор [v-cloak] скрывает необработанный контент.

Логика (Vue 3 Composition API)

Это «мозг» нашего приложения, написанный с использованием современного Composition API.

Реактивные данные:

  1. tasks — это реактивный массив, где хранятся все наши задачи. Каждая задача — это объект с текстом и статусом выполнения.
  2. task — реактивная строка, которая хранит текст новой задачи из поля ввода.

Методы:

  1. addItem() — добавляет новую задачу в массив tasks, если поле ввода не пустое.
  2. deleteItem(text) — находит и удаляет задачу по ее текстовому содержимому.
  3. deleteAll() — полностью очищает список задач.
  4. clearInput() — очищает поле ввода.

Вычисляемые свойства computed:

  1. calcCurrent — автоматически вычисляет количество невыполненных задач. Vue сам следит за зависимостями, и значение пересчитывается только при изменении массива tasks.
  2. calcDone — аналогично вычисляет количество выполненных задач.

Использование Composition API делает код модульным и легко расширяемым. Вся логика сосредоточена в функции setup(), что упрощает ее повторное использование и организацию.

Готовы оживить ваш проект?

Вам нужен не просто планировщик, а уникальный интерактивный элемент для вашего сайта или веб-приложения? Этот пример — лишь малая часть того, что мы можем создать.

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

Свяжитесь с нами для бесплатной консультации!