Задание: добавление переменных в компонент в проекте OnlinePizza
В этом задании вы подключите моковые данные, создадите реактивные переменные и реализуете отрисовку списков с помощью v-for. Используйте знания о Composition API и директивах, полученные в предыдущих уроках.
Шаг 1. Создайте файлы с моковыми данными
В директории src/mocks/ создайте четыре JSON-файла с данными, повторяющими структуру из db.json:
src/mocks/dough.json — массив объектов с полями id, name, description, price. Два варианта: "Тонкое" (цена 0) и "Толстое" (цена 50).
src/mocks/sizes.json — массив объектов с полями id, name, multiplier. Три варианта: "23 см" (множитель 1), "32 см" (множитель 1.5), "45 см" (множитель 2).
src/mocks/sauces.json — массив объектов с полями id, name, price. Три варианта: "Томатный" (цена 0), "Сливочный" (цена 30), "Острый" (цена 20).
src/mocks/ingredients.json — массив объектов с полями id, name, price, category. 15 ингредиентов из трёх категорий: cheese (сыры), meat (мясо), vegetable (овощи). Возьмите данные из db.json вашего бэкенда.
Шаг 2. Импортируйте данные в HomeView
Откройте src/views/HomeView.vue и в блоке <script setup> импортируйте все четыре JSON-файла из src/mocks/.
Шаг 3. Создайте реактивные переменные
С помощью ref создайте следующие реактивные переменные:
selectedDough— выбранный тип теста (по умолчанию первый элемент из массива теста, т.е. элемент сid: 1)selectedSize— выбранный размер (по умолчанию первый элемент)selectedSauce— выбранный соус (по умолчанию первый элемент)ingredientQuantities— объект, хранящий количество каждого ингредиента в формате{ [ingredientId]: quantity }(по умолчанию все значения равны 0)
Шаг 4. Отрисуйте список типов теста
В шаблоне создайте секцию "Тесто". С помощью директивы v-for пройдите по массиву теста и для каждого элемента отрисуйте кнопку или блок с названием.
Реализуйте выбор: при клике на элемент (@click) обновляйте значение selectedDough.
Используйте динамическую привязку класса (:class), чтобы визуально выделять текущий выбранный тип теста — например, добавляйте класс active к выбранному элементу.
Не забудьте указать :key для директивы v-for — используйте id элемента.
Шаг 5. Отрисуйте список размеров
Аналогично создайте секцию "Размер". Пройдите по массиву размеров с v-for, отрисуйте элементы выбора. При клике обновляйте selectedSize, выбранный размер выделяйте с помощью динамического класса.
Шаг 6. Отрисуйте список соусов
Создайте секцию "Соус" по тому же принципу: v-for по массиву соусов, выбор по клику, динамическое выделение выбранного.
Шаг 7. Отрисуйте список ингредиентов
Создайте секцию "Ингредиенты". Для каждого ингредиента отобразите:
- Название ингредиента
- Цену
Пока не добавляйте механизм изменения количества — просто отрисуйте все ингредиенты в виде списка или сетки карточек. Управление количеством мы добавим, когда создадим компонент AppCounter.
Проверка
Запустите проект и убедитесь, что:
- Все четыре списка (тесто, размер, соус, ингредиенты) корректно отрисовываются на странице
- При клике на тип теста, размер или соус — выбранный элемент визуально выделяется
- Нет ошибок в консоли браузера
- При смене выбора предыдущий элемент теряет выделение, а новый приобретает