Nuxt получает доступ к хранилищу vuex внутри mixin

#vuex #nuxt.js #store

#vuex #nuxt.js #Магазин

Вопрос:

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

страницы/index.vue

 import Vue from 'vue'
import {ToplevelAnimations} from '~/mixins/toplevel_animations'

export default Vue.extend({

    mixins: [
       ToplevelAnimations
    ]
        
})
  

mixins/toplevel_animations.js

  export const ToplevelAnimations = {

    transition(to, from) { 
        // some logic, here I need to access routes stored in store
        return (to_index < from_index ? 'switch-to-left' : 'switch-to-right');
    }
   
}
  

store/index.js

 import {StoreExtensions} from "~/plugins/store_extensions.js";

export const state = () => ({

    MAIN_NAV_LINKS: [
        {
            path: '/',
            title: 'Domov',
            order: 1
        },
        // ...etc
    ],

    CURRENT_PAGE_INDEX: 1

})

export const getters = {

    getMainNavLinks: (state, getters) => {
        return state.MAIN_NAV_LINKS
    }
    // ..etc
}

export const mutations = {

    setCurrentPageIndex(index) {
        state.CURRENT_PAGE_INDEX = index
    } 
    // ...etc
}

export const actions = {
  
  nuxtServerInit ({ commit }, req ) {
    var page_index = StoreExtensions.calculatePageIndex(req.route.path, state.MAIN_NAV_LINKS)
    mutations.setCurrentPageIndex(page_index)
  }
}
  

Ответ №1:

Я никогда не использовал Vue.extend() , всегда используя файлы .vue, так что это может быть по-другому (хотя и не должно). Из моего опыта работы с mixins как в Vue, так и в Nuxt кажется, что mixins получают соответствующий this контекст, когда они назначаются компонентам. Так что для меня простое использование this.$store сработало.