юзаю для диалоговых окон, типа $refs.client.open(id), а другой чувак говорит что это плохо
В этом случае лучше так не делать. Это нормальный подход, но если вы используете его слишком часто, то что-то не так с архитектурой
ну я везде в диалогах кастомных его использую, а как лучше тогда? я пробовал пропсы+watch, казалось это костыль. А явный метод open() выглядит лучше
Вариантов много. Я видел вариантов реализации нечётную кучу для модалок. Как вариант можно закидывать пропросм open и потом события эмитить
ну это же хреново, для пропса надо заводить в родительском компоненте отдельную переменную в data и получается сильная связь, надо эту переменную везде не забывать добавлять отдельно от компонента. А через $refs просто вызвал open() в любом месте и всё
Из того что нравилось, есть один вариант, но он имеет ограничения. Если все модалки открываются по клику, то создать компонент с двумя слотам - первый, то на что нужно нажать, второй - что должно быть в модалке. Внутри компонента флаг open и потом просто то что нужно в слоты кидаешь
У Vue основная идея - у нас есть состояние, которое Vue превращает в html. И вот про модалку по идеологии тоже нужно состояние: открыта модалка или нет
тогда внутри компонента надо писать watch на пропс, а это много вотчей это тоже плохая практика . И во внешнем компоненте надо не забыть отдельную переменную добавить под состояние каждого диалога
так и тут проблемы не лучше 1. Нужно именовать ref, и помнить его название. 2. Сложно понять в родителе текущий статус модалки. 3. refs инициализируется не сразу. можно попасть на undefined 4. отрефакторил модалку и сломалось 100500 мест, где используется контекст через refs ... и тд итп
нет, ни одной этой проблемы нету: 1. помнить надо любую переменную которая больше чем в 1 месте используется 2. А родителю как раз не нужно знать состояние модалки, она себя изнутри закрывает, а родитель только вызывает $refs.dialog.open() по клику 3. не актуально, т.к. окно открывается когда уже все отрисовано, юзер же жмет кнопку например 4. модалка как раз не знает как она называется извне, ее рефакторинг никак на родителя не влияет. Если не изменить метод open конечно
Обсуждают сегодня