> 웹 프론트엔드 > JS 튜토리얼 > Vuex 모듈화 및 네임스페이스에 대한 예제 코드

Vuex 모듈화 및 네임스페이스에 대한 예제 코드

不言
풀어 주다: 2018-08-07 15:02:22
원래의
2890명이 탐색했습니다.

이 기사에서는 vuex 모듈화 및 네임스페이스에 대한 예제 코드를 소개합니다. 이는 특정 참고 가치가 있으므로 도움이 될 수 있습니다.

Vuex Store는 글로벌하게 등록되어 있기 때문에 비즈니스 상태와 메서드를 분리하는 모듈을 도입하고, 서로 다른 모듈에서 이름 충돌(getter, mutation, actions) 문제를 해결하기 위해 네임스페이스를 도입하는 것은 도움이 되지 않습니다. 모듈을 생성합니다. /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 모듈

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
    }
})
로그인 후 복사

을 삽입하여 런처(main.js)에 스토어를 등록합니다. 루트 구성 요소

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)
new Vue({
    el: '#app',
    data() {
        return { rootParam: 'test' }
    },
    store,
    router,
    template: &#39;<Home/>&#39;,
    components: { Home }
})
로그인 후 복사

페이지 구성 요소(./comComponents/sample.vue)에서

<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 &#39;~style/common.styl&#39;
nospace()
    margin 0
    padding 0
height(h)
    height unit(h, &#39;px&#39;)
    line-height unit(h, &#39;px&#39;)

.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 &#39;vuex&#39;
const { mapActions, mapGetters, mapMutations } = createNamespacedHelpers(&#39;sample&#39;)
const { mapActions: mapOtherActions, mapGetters: mapOtherGetters } = createNamespacedHelpers(&#39;other&#39;)

export default{
    data() {
      return {

      }
    },
    computed: {
        ...mapState({
            all : state => state.sample.all
        }),
        ...mapGetters([&#39;all2str&#39;]),
        ...mapOtherGetters([&#39;test&#39;])
    },
    methods: {
        ...mapActions([&#39;loadDataAsync&#39;]),
        ...mapMutations([&#39;removeItem&#39;]),
        ...mapOtherMutations([&#39;testing&#39;])
    },
    created() {
        const pid = this.$route.query.pid
        this.loadDataAsync(keep, pid)
    }
}
</script>
로그인 후 복사

를 선언하고 호출합니다. mapMutations, mapGetters, mapActions를 혼합하려면 객체 확장 연산자를 사용하는 것이 좋습니다. 및 mapState를 페이지 구성 요소에 추가하세요. 페이지 구성 요소에 너무 많은 비즈니스 논리와 상태를 섞지 마세요.

createNamespacedHelpers를 통해 네임스페이스에 매핑됩니다.


프로젝트 구조:

├── 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
로그인 후 복사

관련 권장 사항:

What vue 구성 요소입니까? Vue 구성 요소 소개

Vue 하위 구성 요소와 상위 구성 요소 간의 통신(코드 포함)

위 내용은 Vuex 모듈화 및 네임스페이스에 대한 예제 코드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿