Создание кнопки «В Избранное»
Для добавления валютных пар в избранное создадим кнопку в компоненте Input. Скопируем существующую кнопку и изменим её текст на «В Избранное». Вызов функции добавления в избранное обозначим как Favorite. Функцию создадим позже. Для стилизации кнопки добавим класс f-button и отступ слева 20 пикселей:
.f-button {
margin-left: 20px;
}
Функция добавления в избранное и массив избранных пар
В App.vue создадим функцию Favorite. Она будет добавлять текущие валютные пары в массив favs, хранящий избранные пары. Изначально favs пуст. Для начала просто выведем массив на экран; позже улучшим отображение. Функция Favorite использует метод push для добавления объектов с полями from (валюта конвертации) и to (валюта результата):
data() {
return {
favs: [],
};
},
methods: {
Favorite() {
this.favs.push({ from: this.cryptoFirst, to: this.cryptoSecond });
}
}
Компонент для отображения избранных пар
Создадим компонент Favorite.vue для отображения массива favs. В App.vue импортируем и используем этот компонент, отображая его, если длина массива favs больше нуля:
<!-- App.vue -->
<template>
<Favorite :fs="favs" :get-from-fs="getFromFS"/>
</template>
<script>
import Favorite from './Favorite.vue';
export default {
components: {
Favorite
},
// ...
};
</script>
<!-- Favorite.vue -->
<template>
<div v-if="fs.length > 0">
<h2>Избранное</h2>
<div>
<div v-for="(element, index) in fs" :key="index">
<span>{{ element.from }} - {{ element.to }}</span>
</div>
</div>
</div>
</template>
<script>
export default {
name: 'Favorite',
props: {
fs: {
type: Array,
required: true,
},
},
};
</script>
Стили для Favorite.vue:
div {
display: flex;
justify-content: space-between;
width: 500px;
margin: 0 auto;
/* ... другие стили */
}
h2 {
color: white;
}
Выбор из избранного
Создадим метод getFromFS в App.vue. Он будет принимать индекс элемента из favs и устанавливать значения cryptoFirst и cryptoSecond. Передадим метод в компонент Favorite. В Favorite.vue добавим обработчик клика, вызывающий getFromFS с индексом выбранного элемента. В App.vue добавим обработку getFromFS:
//App.vue
methods: {
getFromFS(index) {
this.cryptoFirst = this.favs[index].from;
this.cryptoSecond = this.favs[index].to;
},
// ...
}
<!-- Favorite.vue -->
<template>
<div v-if="fs.length > 0">
<h2>Избранное</h2>
<div>
<div v-for="(element, index) in fs" :key="index" @click="$emit('get-from-fs', index)">
<span>{{ element.from }} - {{ element.to }}</span>
</div>
</div>
</div>
</template>
<script>
export default {
// ...
emits: ['get-from-fs']
};
</script>
При клике на элемент в избранном, значения будут подставляться в селекторы. Для корректной работы, передадим cryptoFirst и cryptoSecond в селекторы через общий prop, например, cryptNow. В селекторах будем использовать этот prop вместо current.
Реализован функционал добавления и выбора валютных пар из избранного, улучшив пользовательский интерфейс.