2017-01-03 3 views
5

Я пытаюсь подтвердить, что не сохранен маршрут формы, и если пользователь отклонил, отменить изменение маршрута.vue-router: предотвращение маршрутизации при изменении аргумента

Он в основном работает с

beforeRouteLeave: function (to, from, next) { 
         if (!confirm('Leaving form')) next(false); 
        } 

Проблема с аргументами маршрутизации, как #/form-path?id=5 - изменение id аргумент не вызывает beforeRouteLeave.

Какой крючок можно использовать для предотвращения изменения навигации?

+1

Это кажется нерешенным [до] (http://stackoverflow.com/q/39900517/1610034). – Saurabh

+0

Простейшим решением было бы изменить все, что вы хотите, чтобы метод был частью маршрута так/form-path/id – vbranden

+0

@vbranden с первого ответа, к сожалению, похоже, что это не помогло бы ... – Unirgy

ответ

1

Dynamic route matching специально разработан для того, чтобы разные маршруты или URL-адреса отображались на один и тот же маршрут или компонент. Следовательно, изменение аргумента технически не считается уходом (или изменением) маршрута, поэтому beforeRouteLeave по праву не увольняется.

Однако, я предлагаю, чтобы можно было выполнить компонент, соответствующий маршруту, ответственному за обнаружение изменений в аргументе. В принципе, всякий раз, когда изменяется аргумент, записывайте изменение, а затем меняйте его (мы надеемся, что разворот будет достаточно быстрым, чтобы пользователь остался незамеченным), а затем попросите подтверждения. Если пользователь подтверждает это изменение, используйте свою запись для «отмены» изменения, но если пользователь не подтвердит, сохраните все, как есть (не меняйте обратное направление).

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

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