2017-02-09 2 views
0

Я разрабатываю приложение с использованием Vue2 и Vue-router (версия^2.2.0), а кнопки навигации назад и вперед должны показывать, может ли пользователь вернуться/вперед или нет.Проверьте, можно ли идти вперед при использовании vue-router

Чтобы проверить, может ли пользователь вернуться, это просто: если пользователь не находится на главном экране, он может.

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

Есть ли способ проверить, есть ли у маршрутизатора «что-то, чтобы идти при вызове router.go (1)»?

+0

В Lastest выпуска 'вя-маршрутизатор v2.2.0' есть' 'onComplete' и onAbort' обратные вызовы для' маршрутизатора .push', как 2-й и 3-й аргументы: 'router.push (location, onComplete, onAbort)'. Я не уверен на 100%, что это сработает, но вы можете попробовать с этими обратными вызовами. –

+0

Это не сработает, так как мне нужны эти обратные вызовы в router.go. – Potray

ответ

0

Веб-приложение? router.go(n) - history.go(n), так что это те же ограничения, что и. Было бы опасно подвергать историю людей веб-сайту. Кроме того, только потому, что они дома, это не значит, что они не могут вернуться и только потому, что пользователь может идти вперед, это не значит, что он будет ориентироваться на что-то в вашем приложении. Если вы пытаетесь воспроизвести кнопку «вперед» и «назад», у вас будет плохое время.

Если это не веб-приложение, вам необходимо вручную отслеживать историю пользователей и сращивать, а также заменять и нажимать так же, как это делает браузер.

+0

Это не веб-приложение, это гибридное приложение для Android, iOS, Windows и OSX. Почему и что именно я должен «сращивать, заменять и толкать»? – Potray

+0

Вам нужно сохранить массив истории, например '[{path: '/ foo', active: true | false}]'. Вы нажимаете на него, когда идете по разным путям, и устанавливаете новую запись как активную. Затем, когда нажата кнопка «Назад» или «Вперед», вам нужно «router.replace (nextUrl)» в правильном направлении и установить для нее значение true. Однако, поскольку это просто приложение, вам может не понравиться реальное поведение браузера в обратном/обратном направлении. Вы уверены, что больше не хотите, чтобы ситуация типа «назад/вперед» прошла через ситуацию с паникой/иерархией. –

+0

Прямо сейчас кнопка «Назад» работает по назначению: она просто вызывает router.go (-1), если текущий экран не является основным. Я не использую router.replace где угодно. Метод, который вы предлагаете, - это обернуть маршрутизатор и никогда не вызывать router.go, не так ли? – Potray

0

Включена ли конфигурация режима HTML5-истории? Документацию можно найти here.

Возможно, вам также понадобится включить его на вашем сервере. Если вы используете экспресс, я получил эту строку в своем коде сервера:

app.use(require('connect-history-api-fallback')()); 
+0

У меня включен режим истории HTML5, но AFAIK, который не позволяет мне проверять, есть ли маршруты для вызова при вызове router.go (1) – Potray

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