Skip to content

Модальное хранилище

В старых версиях этой библиотеки открытие модального окна было возможно только путем передачи компонента. Подход остаётся основным и на текущий день, т.к. дает вам больше контроля и порядка в вашем коде. Однако существует много ситуаций, когда этот подход не удобен. Например, при разработке библиотеки возникает вопрос: как переопределить открытие модальных окон (как заменить модальное окно). Здесь на помощь приходит хранилище.

Инициализация

Для начала необходимо инициализировать хранилище (сохранить в нем нужные нам модальные окна). Все это делается с помощью функции конфигурации:

ts
import {config} from "jenesius-vue-modal";
import ModalConfirm from "./ModalConfirm";
import ModalAlert from "./ModalAlert"

config({
    store: {
        confirm: ModalConfirm,
        alert: {
			component: "ModalAlert"
        }
    }
})

В этом примере мы добавили в хранилище два модальных окна:

  • передав напрямую компоненты
  • во втором случае, мы указали объект с установленным свойством component, это необходимо для установления некоторых свойств конкретно для данной компоненты.

Теперь его можно открыть по имени, передав туда ключ:

ts
openModal('confirm');
openModal('alert');

Конечно, методы pushModal и promptModal также поддерживают эту функциональность.

Проверка модального окна

Если вы пишете библиотеку, для лучшей совместимости добавлена функция, проверяющая наличие модального окна в хранилище:

ts
import {getComponentFromStore} from "jenesius-vue-modal";
getComponentFromStore('alert') // undefined
getComponentFromStore('confirm') // Component

Возвращает компонент VueComponent, если он был ранее инициализирован в хранилище, в противном случае undefined.

Расширенная передача компоненты

В данной артикле рассмотрим случай, когда мы вместе компоненты передаём целый объект с описанным свойством component. В таком случае мы также можем указать следующие свойства:

  • backgroundClose
  • draggable
  • beforeEach

Все эти свойства соответствуют параметром из конфигурации.

ts
config({
    store: {
		confirm: {
			component: ModalConfirm,
			draggable: true,
			backgroundClose: false,
			beforeEach() {
				Logger.write('Попытка открыть окно подтверждения.')
			}
		}
    }
})