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

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

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

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

50 ответов

108 просмотров

Передавай состояние через 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 Причем, скорей всего он будет неименованный, а дефолтныц

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

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

Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
55
Я тут за тем, чтобы задать вопрос, так как не знаю ассемблер, учу с/с++. Короче, насколько дорога операция перехода в функцию при ее вызове? Дело в том, что в с++ есть макросы...
Максим Рябцев
11
hello friends. Do you know how can I learn getx? I have a software project that I should deliver it up to 5 weeks later and I need to learn firebase too. I will be thankfull
AmirHossein Razavi
15
Доброе время суток! у меня тут иноды закончились. и понял почему по сути кстит, я периодически очищаю постгрес и сентри контайнер: postgres=# DELETE FROM nodestore_node WHER...
Юсиф Насиров
9
Привет, нужен совет старших товарищей. Есть глобальная переменная var DefaultDataFolder:string; инициализируем DefaultDataFolder:='a:\_OUT\'; есть примитивная процедур...
Max Otto
14
lazarus-3.2.0/gtk, linux патч "имя проекта по умолчанию project1 -> prj" день добрый не нравится "именя проекта по умолчанию" (project1), к.раз приходится переименовывать (н...
livontiy
5
Вопрос. Теоретический. Есть список команд. Команды отправляю в обработку некой функции, по очереди. Разные команды могут давать разные результаты после обработки. В зависимос...
Serjone
7
Коллеги, а в чём сейчас хорошо писать на перле, в смысле ide? Пробовал в идее с плагином, подсветка есть, даже какие-то предупреждения есть, но рефакторинга считай нет. Перене...
Дмитрий Петров
9
Can I forward ports (including the SSH port) between two machines without SSH? I know I can forward SSH server port from machine A (which blocks all requests by firewall) to ...
required optional
5
Всем вечера. Подскажите как лучше сделать. делаю на Д10 Например будет база данных на SQLite. в ней будет много таблиц. более 50шт Типа справочник. Содержать ID Name Id p...
Андрей Т 🐎
10
Карта сайта