最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

vuex模块化和命名空间的实例代码

来源:动视网 责编:小采 时间:2020-11-27 19:32:44
文档

vuex模块化和命名空间的实例代码

vuex模块化和命名空间的实例代码:这篇文章给大家介绍的内容是关于vuex模块化和命名空间的实例代码 ,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。因为Vuex Store是全局注册的,不利于较大的项目,引入模块分离业务状态和方法,引入命名空间解决不同模块内(getter
推荐度:
导读vuex模块化和命名空间的实例代码:这篇文章给大家介绍的内容是关于vuex模块化和命名空间的实例代码 ,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。因为Vuex Store是全局注册的,不利于较大的项目,引入模块分离业务状态和方法,引入命名空间解决不同模块内(getter


这篇文章给大家介绍的内容是关于vuex模块化和命名空间的实例代码 ,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

因为Vuex Store是全局注册的,不利于较大的项目,引入模块分离业务状态和方法,引入命名空间解决不同模块内(getters,mutaions,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)中注册 store 到根组件

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 }
})

页面组件(./components/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 '~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>

推荐使用对象展开运算符将 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

相关推荐:

vue组件是什么?Vue组件的的介绍

Vue子组件与父组件之间的通信(附代码)

文档

vuex模块化和命名空间的实例代码

vuex模块化和命名空间的实例代码:这篇文章给大家介绍的内容是关于vuex模块化和命名空间的实例代码 ,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。因为Vuex Store是全局注册的,不利于较大的项目,引入模块分离业务状态和方法,引入命名空间解决不同模块内(getter
推荐度:
标签: 模块 实例 的实例
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top