ソースを参照

Swipe to delete

Евгений Колесников 1 年間 前
コミット
9e15dea1d5
2 ファイル変更132 行追加5 行削除
  1. 131 5
      articles/web_21.md
  2. 1 0
      readme.md

+ 131 - 5
articles/web_21.md

@@ -1,13 +1,139 @@
 [К содержанию](../readme.md#введение-в-web-разработку)
 
-# Криптономикон: улучшаем API - Vue.js: практика
+# Swipe to delete: vue-swipe-actions
 
-<!-- 10 + 22 + 8 мин -->
+>Реферат Алаева Д. Публикуется "как есть". 
+>
+>Вообще в веб разработке свайпы используются редко, но если мы делаем **PWA** или **Capacitor** приложение для мобильных устройств, то может понадобиться
 
-1. [#21 Криптономикон: улучшаем API - Vue.js: практика](https://www.youtube.com/watch?v=DBTNTNIPrx8&list=PLvTBThJr861yMBhpKafII3HZLAYujuNWw&index=22)
+![](https://i.imgur.com/doIx6fV.gif)
 
-1. [#22 Криптономикон: refs - Vue.js: практика](https://www.youtube.com/watch?v=uWDmfA7WE5Q&list=PLvTBThJr861yMBhpKafII3HZLAYujuNWw&index=23)
+## Установка
 
-1. [#23 nextTick - Vue.js: нюансы](https://www.youtube.com/watch?v=zluGw3aJAMs&list=PLvTBThJr861yMBhpKafII3HZLAYujuNWw&index=24)
+```bash
+npm install vue-swipe-actions
+```
+
+```js
+import { SwipeList } from 'vue-swipe-actions'
+```
+
+## Импорт стилей
+
+```js
+import 'vue-swipe-actions/dist/vue-swipe-actions.css'
+```
+
+## Создание списка, который будет выводиться
+
+```js
+const page = ref(0);
+const mockSwipeList = ref([
+  [
+    {
+      id: "a",
+      title: "Название фильма 1",
+      description: "Описание фильма 1",
+    },
+    {
+      id: "b",
+      title: "Название фильма 2",
+      description: "Описание фильма 2",
+    },
+  ],
+])
+```
+
+### Функция удаления предмета
+
+Метод удаления будет принимать item и удалять его находя в SwipeList
+
+```js
+function remove (item) {
+  const itemIndex = mockSwipeList.value.findIndex(i => i.id === item.id)
+  if (itemIndex !== -1) {
+    mockSwipeList.value.splice(itemIndex, 1)
+  }
+}
+```
+
+### Функция добавления предмета( если надо )
+
+```js
+const name = ref('')
+const description = ref('')
+
+function add() {
+  const newItem = {
+    title: name.value,
+    description: description.value,
+  }
+
+  mockSwipeList.value.push(newItem);
+  name.value = ''
+  description.value = ''
+}
+```
+
+### Шаблон
+
+Вставляем компонент `swipe-list`
+
+- `:items="mockSwipeList"` связывает выводимый список
+
+```html
+<div id="app">
+    <swipe-list
+        class="card"
+        :items="mockSwipeList" >
+
+    </swipe-list>
+</div>
+```
+
+### Отображение списка (в самом swipe-list)
+
+- `v-slot="{ item, index }"` передача данных через v-slot
+
+```html
+<template v-slot="{ item, index }">
+    <div class="card-content">
+        <!-- расположение контента -->
+        <h2>{{ item.title }}</h2>
+        <p>
+            <b>id:</b>
+            {{ item.id }}
+            <b>description:</b>
+            {{ item.description }}
+        </p>
+        <b>index:</b>
+        <span>{{ index }}</span>
+    </div>
+</template>
+```
+
+### Отображение кнопки удаления слева
+
+```html
+<template v-slot:left="{ item }">
+    <div class="swipeout-action red" @click="remove(item)">
+        <!-- картинка мусорки -->
+        <i class="fa fa-trash"></i>
+    </div>
+</template>
+```
+
+>Нигде не упоминается: класс `fa` означает, что в проекте должен использоваться набор иконок **FontAvesome** (возможно он зашит в стили пакета)
+
+### Отображение кнопки лайка справа (если надо)
+
+```html
+<template v-slot:right="{ item }">
+    <div class="swipeout-action blue">
+        <!-- картинка сердца -->
+        <i class="fa fa-heart"></i>
+    </div>
+</template>
+```
 
 [Назад](./web_20.md) | [Дальше](./web_22.md)

+ 1 - 0
readme.md

@@ -356,6 +356,7 @@ https://office-menu.ru/uroki-sql Уроки SQL
 1. [Vue.js: "Карусель"](./articles/web_18.md)
 1. [Vue.js: Работа с Яндекс картами](./articles/web_19.md)
 1. [Vue.js: Валидация форм](./articles/web_20.md)
+1. [Swipe to delete (смахнуть для удаления)](./articles/web_21.md)
 
 <!--