当前位置: 首页 > news >正文

Vuex模块化

  1. store/index.js
    【sumOptions、newsOptions分文件存放,并利用modules配置项将其模块化】
    import Vue from 'vue';
    import Vuex from 'vuex';
    import sumOptions from './sum';
    import newsOptions from './news';
    Vue.use(Vuex);
    export default new Vuex.Store({
    	modules: {
    		sumOptions,
    		newsOptions
    	}
    });
    
  2. store/sum.js
    export default {
    	namespaced: true,  // 命名空间,为true才可以通过mapState....使用'sumOptions'名字
    	state: {
    		sum: 0
    	},
    	actions: {
    		addNumGt5(context, value) {
    			if (context.state.sum > 5) {
    				context.commit('addNum', value);
    			}
    		}
    	},
    	mutations: {
    		addNum(state, value) {
    			state.sum += value;
    		}
    	},
    	getters: {
    		addPrefix(state) {
    			return '@' + state.sum;
    		}
    	}
    }
    
  3. store/news.js
    export default {
    	namespaced: true,
    	state: {
    		title: '新闻标题',
    		content: '新闻内容'
    	},
    	actions: {},
    	mutations: {},
    	getters: {
    		getInfo(state) {
    			return state.title + ',' + state.content;
    		}
    	}
    }
    
  4. 以Count组件举例使用vuex中的状态
    <template>
    	<div>
    		<p>总和为:{{sum}}</p>
    	    <button @click="addNum(addend)">+</button>  <!-- 需要传入参数 -->
    	    <button @click="addNumGt5(addend)">总和>5才+</button>  <!-- 需要传入参数 -->
    	    <p>{{addPrefix}}</p>
    	</div>
    </template>
    <script>
    import {mapState, mapGetters, mapActions, mapMutations} from 'vuex';
    export default {
    	name: 'Count',
    	data() {
    		return {
    			addend: 1
    		}
    	},
    	computed: {
    		// 普通方式获取state
    		sum() {
    			return this.$store.state.sumOptions.sum;   // state中分了两个模块,需要多加一层获取到sum
    		},
    		// mapState方式
    		...mapState('sumOptions', ['sum']),  // 设置了namespaced=true,才能在这里使用sumOptions获取到sum值
    
    		// 普通方式获取getters
    		addPrefix() {
    			return this.$store.getters['sumOptions/addPrefix'];
    		},
    		// mapGetters方式
    		...mapGetters('sumOptions', ['addPrefix']),
    	},
    	methods: {
    		// 普通方式调用dispatch
    		addNumGt5() {
    			this.$store.dispatch('sumOptions/addNumGt5', this.addend);
    		},
    		// mapActions方式
    		...mapActions('sumOptions', ['addNumGt5']),
    
    		// 普通方式调用commit
    		addNum() {
    			this.$store.commit('sumOptions/addNum', this.addend);
    		},
    		// mapMutations方式
    		...mapMutations('sumOptions', ['addNum'])
    	}
    }
    </script>
    

相关文章:

  • 网页制作的目的和意义/杭州seo排名优化
  • 发布培训的免费网站模板/宁波免费建站seo排名
  • wordpress baby/谷歌搜索引擎入口363
  • 网站建设的阶段/宁波seo推荐推广平台
  • 怎样做阿里巴巴网站/搜外seo
  • 幼儿园建设网站意义/百度投诉电话24小时
  • php 安装curl扩展支持sftp协议
  • MobaXterm连接出现 Network error: Connection timed out 问题解决
  • 6.8 酉空间
  • 【JS】快速入门DOM
  • 十五天学会Autodesk Inventor,看完这一系列就够了(三),拉伸命令
  • Python学习笔记-网络爬虫基础
  • 如何快速删除CSV、Excel、Markdown表格的重复行?
  • CRMEB开源商城部署在腾讯云2
  • 第三章 熟悉的气息
  • 阿里云服务器安装图形界面
  • 接口幂等性设计
  • Rancher 2022 关键主题与新年展望