Dieser Artikel stellt Ihnen den Beispielcode zur Vuex-Modularisierung und zum Namensraum vor. Ich hoffe, dass er für Freunde hilfreich ist.
Da der Vuex Store global registriert ist, was für größere Projekte nicht förderlich ist, führen Sie Module ein, um Geschäftszustände und -methoden zu trennen, und führen Sie Namespaces ein, um das Problem von Namenskonflikten (Getter, Mutationen, Aktionen) in verschiedenen Modulen zu lösen
Erstellen Sie zuerst ein Modul./store/modules/sample.js
import SampleAPI from '@/api/sample-api-proxy.js' import { _AjaxUrl } from '@/store/constants' const state = { all: [] } const mutations = { resolve (state, payload) { for (let item of payload) { state.all.push(item) } } } const getters = { allstr (state) { return state.join(',') } } const actions = { async init ({commit,state}, pid) { await SampleAPI.get(_AjaxUrl + '/api/game/all', params: {pid}).then((res) => { state.all = res.all commit('resolve', res.data) }) } } export default { namespaced: true, state, mutations, getters, actions }
./store/index.js Injizieren Sie das Modul
import Vuex from 'vuex' import sample_module from './modules/sample' import other_module from './modules/other' export default new Vuex.Store({ //全局Store对象 mutations, actions, state, //模块 modules: { sample: sample_module, other: other_module } })
Store bei der Stammkomponente im Launcher (main.js) registrieren
import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) new Vue({ el: '#app', data() { return { rootParam: 'test' } }, store, router, template: '<Home/>', components: { Home } })
Seitenkomponente (./ Components/sample.vue) und Aufruf
<template> <div id="container"> <ul> <li v-for="(item, index) in all" :key="index"> <span>{{item}}</span> <button @click="removeItem(index)">删除</button> </li> </ul> <div>{{all2str}}</div> </div> </template> <style rel="stylesheet/stylus" scoped> @import '~style/common.styl' nospace() margin 0 padding 0 height(h) height unit(h, 'px') line-height unit(h, 'px') .sample-ul list-style-type none @nospace li display block height(20) &:hover background-color #fcc </style> <script type="text/ecmascript-6"> import { createNamespacedHelpers, mapState } from 'vuex' const { mapActions, mapGetters, mapMutations } = createNamespacedHelpers('sample') const { mapActions: mapOtherActions, mapGetters: mapOtherGetters } = createNamespacedHelpers('other') export default{ data() { return { } }, computed: { ...mapState({ all : state => state.sample.all }), ...mapGetters(['all2str']), ...mapOtherGetters(['test']) }, methods: { ...mapActions(['loadDataAsync']), ...mapMutations(['removeItem']), ...mapOtherMutations(['testing']) }, created() { const pid = this.$route.query.pid this.loadDataAsync(keep, pid) } } </script>
Es wird empfohlen, den Objekterweiterungsoperator zum Mischen von MapMutations, MapGetters, MapActions und zu verwenden mapState in Seitenkomponenten. Die Seite dient nur der interaktiven Erfahrung, vermischen Sie nicht zu viel Geschäftslogik und Status
Zu Namespace über createNamespacedHelpers zuordnen
Projektstruktur:
├── index.html ├── main.js ├── api │ ├── sample-api-proxy.js │ └── ... ├── components │ ├── sample.vue │ └── ... └── store ├── index.js ├── actions.js ├── mutations.js ├── state.js └── modules ├── sample.js └── other.js
Verwandte Empfehlungen:
Was ist die Vue-Komponente? Einführung in Vue-Komponenten
Kommunikation zwischen untergeordneten Vue-Komponenten und übergeordneten Komponenten (mit Code)
Das obige ist der detaillierte Inhalt vonBeispielcode für Vuex-Modularisierung und Namespaces. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!