【发布时间】:2020-03-07 22:14:26
【问题描述】:
将此方法与 Nuxt 一起使用:https://github.com/championswimmer/vuex-module-decorators#accessing-modules-with-nuxtjs
存储/索引.ts:
import { Store } from 'vuex'
import { initialiseStores } from '~/utils/store-accessor'
const initializer = (store: Store<any>) => initialiseStores(store)
export const plugins = [initializer]
export * from '~/utils/store-accessor'
utils/store-accessor.ts:
import { Store } from 'vuex'
import { getModule } from 'vuex-module-decorators'
import settingsModule from '~/store/settingsModule'
// eslint-disable-next-line
let settingsStore: settingsModule
// noinspection JSUnusedGlobalSymbols
function initialiseStores(store: Store<any>): void {
settingsStore = getModule(settingsModule, store)
}
export { initialiseStores, settingsStore }
存储/settingsModule.ts:
import { Action, Module, Mutation, VuexModule } from 'vuex-module-decorators'
@Module({
name: 'settingsModule',
namespaced: true,
stateFactory: true
})
export default class settingsModule extends VuexModule {
public videos: any[] = []
@Mutation
public SAVE_VIDEOS(value: any) {
this.videos = value
}
@Action({ commit: 'SAVE_VIDEOS' })
public saveVideos(value: any) {
return value
}
// noinspection JSUnusedGlobalSymbols
get videosArray() {
return this.videos
}
}
我实际上如何调用nuxtServerInit()?如果我在“store/index.ts”中尝试:
export const actions: ActionTree<any, any> = {
async nuxtServerInit({ dispatch }) {
await dispatch('settingsModule/saveVideos', [1, 2, 3, 4, 5], { root: true })
}
}
当我加载我的网络应用程序时,nuxt 不会触发动作调度。
【问题讨论】:
-
你输入的是
nuxtServerInit({ displatch })而不是dispatch -
@Ifaruki 我在这里手动输入了这个代码,我在实际代码中没有那个错字,谢谢。
-
您的应用程序处于“通用”模式而不是“水疗中心”模式,对吧?在通用模式下,nuxtServerInit 应该在服务器端(而不是客户端)触发
-
它是通用的。它在服务器端触发,但 nuxt 也在控制台的 SSR 下拉菜单下的浏览器中触发。
标签: typescript vue.js vuex nuxt.js