Аннотация
У меня есть предложение решения. Не уверен, удовлетворит ли он вас, но, может быть, он по крайней мере даст вам новую перспективу.
Пример
Настройка маршрутизатора:
const routes = [
{
path: '/combined-components',
name: 'CombinedComponents',
components: {
default: WrapperComponent,
'firs-component': SelectOutlet,
'second-component': OrderItems
},
}]
Настройка шаблона:
<div class="wrapper-component">
<div class="container">
<div class="first-component">
<router-view name="first-component"></router-view>
</div>
<div v-if="isMobile" class="second-component">
<router-view name="second-component"></router-view>
</div>
</div>
<div>
Пояснение
Используя атрибут name
для <router-view>
, мы можем решить, какой компонент будет отображаться в зависимости от текущего маршрута. Таким образом, у нас есть один родительский компонент в этом случае WrapperComponent
, и внутри его шаблона мы можем свободно разместить другой <router-view>
, а в routes.js
(или просто в маршрутах const, которые вы передаете для настройки маршрутизатора) вы можете указать, каким компонентом вы хотите быть помещается в слот first-component
и second-component
. Это позволяет объединить 2 из них и просто продолжить дальнейшие маршруты, не выходя из WrapperComponent
. Что нужно сделать, это определить, следует ли отображать второй компонент или нет. В зависимости от isMobile
, который вы можете определить самостоятельно (я бы предположил, исходя из ширины экрана).
Документы
Подробнее читайте здесь: Vue Документы маршрутизатора
Резюме
В этом подходе он работает с другой стороны. Вы готовите его для рабочего стола и просто ограничиваете его для мобильных устройств.