| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 | import store from '@/store'const { body } = documentconst WIDTH = 992 // refer to Bootstrap's responsive designexport default {  watch: {    $route(route) {      if (this.device === 'mobile' && this.sidebar.opened) {        store.dispatch('app/closeSideBar', { withoutAnimation: false })      }    }  },  beforeMount() {    window.addEventListener('resize', this.$_resizeHandler)  },  beforeDestroy() {    window.removeEventListener('resize', this.$_resizeHandler)  },  mounted() {    const isMobile = this.$_isMobile()    if (isMobile) {      store.dispatch('app/toggleDevice', 'mobile')      store.dispatch('app/closeSideBar', { withoutAnimation: true })    }  },  methods: {    // use $_ for mixins properties    // https://vuejs.org/v2/style-guide/index.html#Private-property-names-essential    $_isMobile() {      const rect = body.getBoundingClientRect()      return rect.width - 1 < WIDTH    },    $_resizeHandler() {      if (!document.hidden) {        const isMobile = this.$_isMobile()        store.dispatch('app/toggleDevice', isMobile ? 'mobile' : 'desktop')        if (isMobile) {          store.dispatch('app/closeSideBar', { withoutAnimation: true })        }      }    }  }}
 |