2016-03-08 5 views
0

Если компонент A - это мое приложение, и у меня есть маршрут, который сопоставляется с компонентом B. Затем компонент В имеет маршрутизатора вид в нем, что я хотел бы, чтобы иметь возможность переключаться между компонентом C и компонента D .Vue JS, поддерживающий маршрут при соединении с вложенными маршрутами

Когда я соединяю к компоненту C или D он работает, но он снова делает весь маршрут, так B оказывается снова и я прокручивается к вершине.

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

ответ

1

Компонент B не должен быть повторно чертежа при перемещении между C и D, если вы установите canReuse ложь: http://vuejs.github.io/vue-router/en/pipeline/can-reuse.html

Если вас прокручивается к вершине это, вероятно, потому, что, когда содержание C или D исчезает, высота сайта сводится только к заголовку и, таким образом, автоматически прокручивается. Вы можете попробовать сделать компонент B height:100%, чтобы он не сжимался.

Редактировать: вложенные маршруты фактически решают эту проблему. Таким образом, вы никогда не фактически повторно маршрутизации B, вы просто навигации в пределах subroutes от B:

'/:param_one': { 
    component: require('./RouteOne.vue'), 
    name:'RouteOne', 
    subRoutes:{ 
     '/:param_two':{ 
      component:require('./views/Dashboard/OtherRoute.vue'), 
      name:'OtherRoute' 
     } 
    } 
} 
+0

кажется, что переход данных маршрута вызываются снова на B, который устанавливает loadingRouteData истины и принести вверх. Из документов: данные также вызывается каждый раз, когда маршрут изменяется, даже если текущий компонент используется повторно, а активация вызывается только тогда, когда компонент вновь создан. Я думаю, мне не нужно перезагружать данные, если изменить его просто подпрограмму. У меня есть параметр маршрута, который я могу проверить вручную, но что, если в B> – ThingWings

+0

не было параметра маршрута. Существует крюк маршрута, называемый 'activate', который вы можете использовать вместо' data'. Этот номер не будет вызываться снова, если маршрут повторно используется: http://vuejs.github.io/vue-router/en/pipeline/activate.html – Jeff

+0

Я думаю, что проблема с использованием этого компонента будет не отображаться до тех пор, пока этот переход не будет разрешен и он не установит loadRouteData. Поскольку мои данные являются асинхронными, он будет сменять маршруты, а не сразу же с помощью счетчика загрузки. Я мог бы обойти это, возможно, не вернув обещание от перехода активации, а просто установив свой собственный атрибут загрузки true, а затем false в обратном вызове. – ThingWings

Смежные вопросы