169 похожих чатов

Привет! Как можно узнать что в определнный router-view смонтирован компонент?

У меня примерно так - layout состоит из 3х частей - sidebar, main, drawer. Sidebar и drawer пользователь может закрыть, оставаясь на той же странице. Но мне надо об этом знать, например надо скрыть внешний компонент drawer , если внутри ничего не смонтировано.
Я делаю это через query-params. Sidebar и drawer в mounted/destroy/click меняют их.

Но! Меня при этом преследует ошибка от router, что навигация в самого себя запрещена (path не меняется), и что хуже не работает replace, каждое изменение query попадает в историю :((

50 ответов

98 просмотров

Передавай состояние через provide / inject, если данные не пришли менять состояние элементов

oxid- Автор вопроса

Не понял, как часть с сайдбарами связана с ошибкой роутера...

oxid- Автор вопроса
Grigorii K. Shartsev
Не понял, как часть с сайдбарами связана с ошибкой...

Ну когда юзер нажимает на крестик на сайдбаре, я делаю примерно так router.replace(route.fullPath,{ sidebar: 0 })

oxid
Ну когда юзер нажимает на крестик на сайдбаре, я д...

То есть всегда состояние сайдбаров завязано на query параметрах? И это намеренно (нужно именно как часть URL, а не просто так соединилось)?

oxid- Автор вопроса
Grigorii K. Shartsev
Не понял, как часть с сайдбарами связана с ошибкой...

А sidebar это компонент внутри которого находится router-view. И сам этот внешний компонент закрывается по этой опции в query

oxid
Ну когда юзер нажимает на крестик на сайдбаре, я д...

А зачем ты делаешь привязку роутера и компонентов, которые могут обойтись без него ?

oxid- Автор вопроса
Grigorii K. Shartsev
То есть всегда состояние сайдбаров завязано на que...

Ну пока это единственное что я придумал, и кажется это не лучший вариант :)

oxid- Автор вопроса
oxid
Поподробнее пожалуйста)

Ты вышел уже ответил, я понял)

oxid
Поподробнее пожалуйста)

Не понятно, намеренно ли связаны query параметр и сайдбар, или это было просто единственной идеей как управлять сайдбаром

oxid- Автор вопроса
Grigorii K. Shartsev
Не понятно, намеренно ли связаны query параметр и ...

Пока единственной идеей. Ну вообще изначально когда юзер заходит на страницу сайдбар заполняет роутер, это именнованный view. И тут все ок, мне надо только как-то понять что юзер его закрыл.

oxid
Пока единственной идеей. Ну вообще изначально когд...

Так а почему не повесишь на крестик пользовательское событие , которое будет передавать его куда тебе нужно?

oxid- Автор вопроса
oxid
Пока единственной идеей. Ну вообще изначально когд...

Если не нужно иметь именно ссылку, именно URL на открытие сайдбара, то достаточно просто иметь "глобальную" реактивную переменную с состоянием открыто/закрыто (ну или event emitter) для управления его состоянием.

oxid- Автор вопроса
Ruslan
сайдбар через роутер - плохая идея

А почему? У меня в нем много разного монтируется

и в мобильном виде сайдбар навигационный через роутер?

oxid
А почему? У меня в нем много разного монтируется

роутер - для того, что связано с роутингом, состояние чего хранится в URL идентификаторе

oxid- Автор вопроса
Ruslan
и в мобильном виде сайдбар навигационный через роу...

У меня он не навигационный, а окошко с разной информацией информацией, не знаю, наверное это называется не sidebar. Но да, через роутер. В зависимоти от урл в нем отображается разное содержимое.

oxid
У меня он не навигационный, а окошко с разной инфо...

То есть когда он открыт и закрыт - разные url ? Можешь пример показать их

Ruslan
То есть когда он открыт и закрыт - разные url ? Мо...

Показывать разный контент в зависимости от URL - нормально. Но редко нужно именно факт открытия хранить в адресе страницы

oxid- Автор вопроса
Ruslan
То есть когда он открыт и закрыт - разные url ? Мо...

Нет ) Что-то мы не понимаем друг друга. Есть разные url, например /pages/page1 и /pages/page2, когда ты на них захожишь у тебя справа, в "сайдбаре" показываются два разных компонента. Но сам сайдбар юзер может закрыть. При этом мне надо знать что содержимое пропало, чтобы скрыть например остатки сайдбара.

Grigorii K. Shartsev
Показывать разный контент в зависимости от URL - н...

Я бы такое хранил в каком нибудь useAppConfig и локал сторидже Это динамичная персональная настройка UI пользователя - открыто или закрыто А не часть роута

oxid- Автор вопроса
Ruslan
Я бы такое хранил в каком нибудь useAppConfig и ло...

Эта идея не дружит с разными табами и не реактивная

oxid
Эта идея не дружит с разными табами и не реактивна...

useAppConfig - реактивно, с сохранением в ЛС

oxid- Автор вопроса
Ruslan
Я бы такое хранил в каком нибудь useAppConfig и ло...

Собственно выше мне подсказали простое решение - посылать событие когда юзер жмет крестик, и кажется это полностью меня устраивает))

oxid- Автор вопроса
Ruslan
useAppConfig - реактивно, с сохранением в ЛС

ЛС - перезтрет данные с разных вкладок

oxid
ЛС - перезтрет данные с разных вкладок

если тебе вообще надо это запоминать между сессиями похоже, что нет

oxid
нет, не надо

тогда один глобальный ref всё сделает

oxid- Автор вопроса
Grigorii K. Shartsev
роутер - для того, что связано с роутингом, состоя...

а вот интересно. Компоненты vue вроде не связаны с роутингом (в то время, как роутер связан). И вот они данные получают через пропсы, но некоторые из них используют useRoute, получают данные из роута. Откуда, из какого инсайта им знать, что данные надо получить из роута? Делая это, они связываются с роутингом также, как и сам роут. А если нет разницы, то какая разница: используются именованные представления или та же логика делается через компоненты с useRoute?

Роман Бандурин
а вот интересно. Компоненты vue вроде не связаны с...

chatGPT не понял тебя Пожалуйста, переформулируйте свой промпт

Да, да

Grigorii K. Shartsev
Да, да

Если и то, и то связано с роутингом, то какая разница: используются именованные представления или та же логика делается через компоненты с useRoute?

Роман Бандурин
Если и то, и то связано с роутингом, то какая разн...

Этот вопрос связан с обсуждением сайдбара выше?

Grigorii K. Shartsev
Этот вопрос связан с обсуждением сайдбара выше?

да, если разницы нет, то сайдбар можно разместить в именованном представлении

Ruslan
с useRoute будет каша

предлагаешь через именованные представления?

Роман Бандурин
Если и то, и то связано с роутингом, то какая разн...

именованные роуты удобны, они позволяют явно написать, что вот в этом роуте используется такой-то компонент. А в родителе просто рендерить "текущий компонент". Делать кучу v-if=route === route1 - некрасиво. Делать из этого красивый компонент = сделать копию RouterView

Роман Бандурин
да, если разницы нет, то сайдбар можно разместить ...

Там задача была с открытием/закрытием сайдбара

Роман Бандурин
предлагаешь через именованные представления?

Ты не понял предыдущего обсуждения и залез не туда

Grigorii K. Shartsev
Там задача была с открытием/закрытием сайдбара

там он может использовать именованные представления для любой цели - его дело. Лично мне интересно почему именованные представления - плохая практика

Роман Бандурин
там он может использовать именованные представлени...

Они не плохая практика, просто редко встречаются задачи, в которых они подходят

Роман Бандурин
Если и то, и то связано с роутингом, то какая разн...

Через именованные представления ты заменяешь компоненты обычно целиком Через useRoute ты всего лишь немного меняешь логику внутри компонента

Ruslan
Через именованные представления ты заменяешь компо...

и в компоненте с useRoute я тоже могу взять убрать какой-либо компонент в шаблоне, и на его место поставить другой. Также как и через именованные представления. Или какого рода изменения целиком имеешь ввиду?

Роман Бандурин
и в компоненте с useRoute я тоже могу взять убрать...

Если ты в компоненте с useRoute убираешь какой-либо компонент в шаблоне, и на его место ставишт другой, то стоит подумать о то чтобы там использовать RouteView Причем, скорей всего он будет неименованный, а дефолтныц

Похожие вопросы

Обсуждают сегодня

а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Всем привет! Подскажите. Я написал приложение на Delphi 10.2 Tokyo под Windows 10. И передо мной стал вопрос о том чтобы сделать это приложение кроссплатформенным (под Linux и...
Дмитрий Завгородний
24
Почему стало ломаться на D11? "739002.86400000' is not a valid timestamp" function IncDateTime(aStamp:TTimeStamp;aKind:TTriggerKind;aInterval:Integer):TDateTime; //aStamp = 2...
Катерина Свиридова
8
Привет всем. Подскажите где можно посмотреть, какая версия электрон, поддерживает версии windows? Некий changelog. Мне бы желательно, поддержку 7,8,10... latest, как понимаю и...
Anonym Squad
21
Портфолио: Зовут меня Александр, мне 36 лет. Город Пушкино. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github....
Magic
10
Есть ли смысл устраиваться на 1с ? Даст это плюс в дальнейшем трудоустройстве на php? Просто у меня в городе вакансий на пхп нету. Или лучше удаленно искать. Опыта работы нету...
Azamat
14
Не ну фпц - это уже просто троллинг какой-то. Элементарный код нельзя собрать. ЧЯДНТ? program Project1; {$mode delphi} uses SysUtils, Classes, Generics.Collections; var...
Peter
4
а где есть mysql cloud кроме яндекс-клауд?
Oleg Nosov
13
hi im a cs student. i need some advice from people who have enough experience in Embedded Software. I need to know whether this profession is suitable for me. I have watched s...
Sahand 🏔️
8
А кто-нибудь запихивал сборку перловых модулей/образов с perl приложениями в окружения без интернета (в специализированном CI/CD)? У меня сейчас есть ряд cpanfile, которые н...
Andrey Smirnov / 𝓪𝓵𝓵𝓽𝓮𝓻 /
14
Карта сайта