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

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

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

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

50 ответов

189 просмотров

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

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

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

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Oh sorry did you want it in Gunter's chains?
Martin Rys
15
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта