Сначала вы можете назначить имя для каждого из ваших объектов маршрутов в массиве маршрутов внутри вашего маршрутизатора или в другом поле, например requiredConfirmation или что-то в этом роде, представьте, что у нас есть маршруты, подобные этому:
routes : [
{
path : '/needconfirm',
component : NeedConfirmToLeaveCom,
name : 'needconfirm-route1'
},
{
path : '/neednotconfirm',
component : NeedNotConfirmToLeaveCom,
name : 'normal-route1'
},
]
затем Вы можете использовать router.beforeEach
, чтобы установить некоторые условия или некоторые подтверждения на основе вашего исходного маршрута и маршрута назначения. что-то вроде этого:
router.beforeEach((to,from,next) => {
if(from.name.startsWith("needconfirm-")) {
if(window.confirm("Are you sure you want to leave the page?")) {
next();
}
}else next();
});
ОБНОВЛЕНИЕ *: если вы хотите использовать некоторые пользовательские компоненты для своего всплывающего окна, вы можете использовать vuex для хранения логики c вашего компонента и переключения и импорта этого компонента в ваше приложение. Vue или другие корневые / дочерние компоненты, которые вы будете sh. потому что у вас есть доступ к управлению вашим магазином, используя $store
верно?
ОБНОВЛЕНИЕ **: и еще одна вещь, которую я хочу упомянуть, если вы хотите сохранить какой-то прогресс или состояние и из-за этого вы хотите получить подтверждение от пользователя (прогресс будет потерян, если они переключат маршрут), вам следует рассмотреть возможность использования Vuex для сохранения вашего прогресса или состояния вашего приложения, и если вы хотите более устойчивое решение, вы можете использовать управление хранилищем VuexPersisted, которое использует LocalStorage.
Vue документ навигационной охраны маршрутизатора
Vuex Do c