Vue2 $router.replace() не вызывает установленный крюк

#vuejs2 #hook #router

Вопрос:

У меня есть приложение Nuxt Vue 2. В смонтированном перехвате происходит перенаправление на тот же маршрут. Единственное отличие в этом маршруте — строка запроса. Похоже

 mounted() {
    ...
    if( !isTokenOwner ) {
        const result = await this.$api.campaignNewShare.copyNewShare(this.newShareToken);
        localStorage.setItem(result.data.token, new Date().getTime());
        this.$router.replace({'name': 'campaigns-new', 'query': {token: result.data.token}});
        this.loading = false;
        return;
    }
}
 

Кажется, что Vue остается на той же странице и заменяет только параметр строки запроса url. Но мне нужно перенаправить на новое местоположение с совершенно новым жизненным циклом.

Может кто-нибудь сказать мне, что на самом деле произошло там после вызова replace()? Почему он не запускает реальное перенаправление? Thnaks.

Ответ №1:

Хорошо, как говорится в документации

При использовании маршрутов с параметрами следует учитывать, что когда пользователь переходит из /user/foo в /user/bar, один и тот же экземпляр компонента будет использоваться повторно. Поскольку оба маршрута отображают один и тот же компонент, это более эффективно, чем уничтожение старого экземпляра, а затем создание нового. Однако это также означает, что перехваты жизненного цикла компонента вызываться не будут.