Возникло событие при изменении маршрута до изменения DOM и за пределами самого маршрута?

Я открыл похожую тему несколько дней назад, где мне предложили использовать beforeRouteLeave в пределах определения компонента маршрута.

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

При переходе с одного маршрута на другой beforeDestroy увольняется после изменения структуры DOM.

Я пытался использовать beforeUpdate а также updated события в моем определении компонента, но ни один из них не запускается до изменения DOM.

import Vue from 'vue'
import MyComponent from '../myComponent/' // <-- Need to fire the event here 
import router from './router'

Vue.use(MyComponent)

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
}).$mount('#app')

1 ответ

В жизненном цикле экземпляра Vue хук beforeDestroy вызывается после изменения DOM.

Вы, скорее всего, ищете beforeUnmount крюк, который был бы между mounted а также beforeDestroy, но это не доступно:

Жизненный цикл VUE

Тем не менее, вы можете воспользоваться преимуществами JavaScript-хуков. Есть хук JavaScript, называемый leave где вы можете получить доступ к DOM, прежде чем он изменится.

leave: function (el, done) {
  // ...
  done()
},

Чтобы это работало, вам нужно обернуть свой элемент в <transition> компонент обертки.

то есть.

<transition
  :css="false"
  @leave="leave"
>
  <div>
    <!-- ... -->
  </div>
</transition>

...

methods: {
  leave(el, done) {
    // access to DOM element
    done()
  }
}
Другие вопросы по тегам