У меня есть одно приложение с одним основным корневым компонентом, Editor .Этот редактор позволяет добавлять, редактировать и удалять строки и столбцы .У строк есть имена, но у столбцов есть имя и ограничение (число).
Row(name:string)
Column(name:string, limit:number)
При добавлении или редактировании строки или столбца Я должен открыть форму вмодальный.Когда удалить один, я должен отобразить диалоговое окно подтверждения.
+-- Editor ---------------------------------------------------------------+
| |
| +-- {{Add|Edit}} row ----+ |
| | | |
| | name: [..............] | +-- Confirm delete of {{row|column}} -+ |
| | [Cancel][Save] | | Confirm deletion of {{row|column}}? | |
| +------------------------+ | [No][Yes] | |
| +-------------------------------------+ |
| +-- {{Add|Edit}} column -+ |
| | | |
| | name: [.............] | |
| | limit: [...] | |
| | [Cancel][Save] | |
| +------------------------+ |
| |
+-------------------------------------------------------------------------+
-
На самом деле у меня есть ModalManager
, который является слишком общим, и вычисляю модель и название модального окна (или диалоговое окно подтверждения) на основе темы ( строка или столбец ) и action ( add , edit , delete ).
Два Модальных компонента с пользовательской формой и один Подтверждение управляются ModalManager
:
<Confirmation v-if="manager.mode==='CONFIRM'"
title="manager.title"></Confirmation>
<Modal v-if="manager.model='ROW' && manager.mode!=='CONFIRM'
title="manager.title">
<!-- form for row with v-model="manager.model" -->
</Modal>
<Modal v-if="manager.model='COLUMN' && manager.mode!=='CONFIRM'
title="manager.title">
<!-- form for column with v-model="manager.model" -->
</Modal>
Как вы можете себе представить,это беспорядок, и я хотел бы изменить это на что-то лучшее.Но у меня недостаточно опыта работы с Vue, чтобы иметь представление о возможностях.
У меня может быть отдельная модель / контроллер для каждого модального ИЛИ использовать мое хранилище Vuex ИЛИ использовать vue-router.Но, опять же, я понятия не имею, как это сделать.
-
Что я могу сделать, чтобы улучшить мой код и управлять тем, какой модальный вид отображается и какие действия связаны с ним?
Редактировать: Боюсь, я не спрашивал о том, «как создать модал».Но как управлять сложным состоянием внутри одного корневого компонента.