vuex教程,vuex使用介绍案例

1.demopageaction:javascript

import Vue from "vue";
import Store from "../../store.js";
import { apiGET, apiPOST } from "../../../utils/ajax.js";
import * as mtypes from '../../constants/mutation-types';
import * as rmtypes from "../../constants/request-types.js";
import * as utypes from "../../constants/url-types.js";
import isEmpty from "lodash/isEmpty";
import qs from "qs";
import { emptyPage } from "../../../utils/help.js"


export function getAgentsListData({
	commit
}, params) {
	apiGET(utypes.GET_AGENTS_LIST_DATA+params, rmtypes.GET_AGENTS_LIST_DATA, (res) => {
		commit(mtypes.SET_AGENTS_LIST_DATA, res);
	},emptyPage)
}

export function getAgentDetail({
	commit
}, params) {
	if (!isEmpty(Store.state.agentsModule.agentDetailAll[params])) {  //这里判断store中是否有数据,有的话就不在请求了
		commit(mtypes.SET_AGENT_SAVED_DETAIL, params);
		return;
	}
	apiGET(utypes.GET_AGENT_DETAIL_INFO+params, rmtypes.GET_AGENT_DETAIL_INFO, (res) => {  //咱们能够在action中请求数据,而后commit给store
		commit(mtypes.SET_AGENT_DETAIL_INFO, {res:res,id:params});
	},emptyPage)
}

export function initAgentDetail({  //基本上action就是这样子,经过commit来改变store中的数据
	commit
}, params) {
	commit(mtypes.SET_AGENT_INIT_DETAIL,'')
}

  

2.actions集合:css

import { setReqState } from "./request/index.js"
import {setTipMsg} from "./stateTip/index.js"
import {getDomainListData,getDomainItemMore,getQrcode,initQrcode} from "./domainList/index.js"
import {getAgentsListData,getAgentDetail,initAgentDetail} from "./agents/index.js"
import {postTradeDomain,postSellDomain,postTellUsNews} from "./form/index.js"
export default {
    setReqState,
    setTipMsg,
    getDomainListData,
    getDomainItemMore,
    initAgentDetail,
    getQrcode,
    initQrcode,
    getAgentsListData,
    getAgentDetail,
    postTellUsNews,
    postTradeDomain,
    postSellDomain,    //本人把分开的action这样集合在一块儿
};

  

3.vuex启动action:vue

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

import actions from './actions/index'
console.log(actions, 'actions=============')

// modules 模块分类
import request from "./modules/request/index.js"
import stateTip from "./modules/stateTip/index.js"
import domainListModule from "./modules/domainList/index.js"
import agentsModule from "./modules/agents/index.js"
import formModule from "./modules/form/index.js"

Vue.use(Vuex)

Vue.config.debug = true

const debug = process.env.NODE_ENV !== 'production'

export default new Vuex.Store({
	strict: debug,
	actions,  //第2步中集合的action就在这里启动
	modules: {
		request,
		stateTip,
		domainListModule,
		agentsModule,
		formModule
	}
})

  

4.接下来是个别的store:java

import * as types from '../../constants/mutation-types.js'
import Vue from "vue"
import Store from "../../store.js";
const state = {
	agentsListData: null,
	agentDetailAll: {},
	agentDetailInfo: null,
	sucCase: []
}

const mutations = {
	[types.SET_AGENTS_LIST_DATA](state, data) {  //store主要是来存储action发送的数据,而后再给view读取
		state.agentsListData = data;
	},
	[types.SET_AGENT_DETAIL_INFO](state, data) {
		state.agentDetailAll[data.id] = data.res;
		state.agentDetailInfo = data.res;
		state.sucCase = state.agentDetailInfo.AgentSucCase.split(',');
		console.log(state.sucCase,"succase")
	},
	[types.SET_AGENT_SAVED_DETAIL](state, id) {
		state.agentDetailInfo = state.agentDetailAll[id];
		state.sucCase = state.agentDetailInfo.AgentSucCase.split(',');
	},
	[types.SET_AGENT_INIT_DETAIL](state, data) {
		state.agentDetailInfo = null;
	},
}
const getters = {

};
export default {
	state,
	mutations,
	getters
}

  

5.集合store,启动store:ajax

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

import actions from './actions/index'
console.log(actions, 'actions=============')

// modules 模块分类
import request from "./modules/request/index.js" //导入每一个独立的store
import stateTip from "./modules/stateTip/index.js"
import domainListModule from "./modules/domainList/index.js"
import agentsModule from "./modules/agents/index.js"
import formModule from "./modules/form/index.js"

Vue.use(Vuex)

Vue.config.debug = true

const debug = process.env.NODE_ENV !== 'production'

export default new Vuex.Store({
	strict: debug,
	actions,
	modules: {
		request, //这里启动每一个独立的store
		stateTip,
		domainListModule,
		agentsModule,
		formModule
	}
})

  

 

 

 

总结:上面几部基本上就是一个vuex的使用流程了。vuex

接下来咱们看下view中的引入:api

<template>
	<div class="bg">
		<Loading v-if="reqState.GET_AGENTS_LIST_DATA"></Loading>
		<div class="list-box" v-else>
			<div class="agent" v-for="(item,index) in agentsListData">
				<router-link :to="{name:'agentdetail',query:{id:item.AgentId},params:{sex:sex}}" class="flex">
					<div class="port-box">
						<img v-if="item.AgentIsChampion==1" src="../../assets/images/huangguan.png" width="20" height="21" class="crown" />
						<div class="port-img" :class="item.AgentIsChampion==1?'port-crown':''"><img width="70px" :src="item.AgentAvatar" /></div>
						<div class="port-name"><span class="ng-binding">{{item.AgentNick}}</span></div>
					</div>
					<div class="agent-info flex1">
						<div class="wx flex">
							<i class="icon"></i>
							<div class="title-info flex1">
								<p class="name">{{item.AgentWeixin}}</p>
								<p class="tit">微信</p>
							</div>
						</div>
						<div class="ph flex">
							<i class="icon"></i>
							<div class="title-info flex1">
								<p class="name"><a href="">{{item.AgentTel}}</a></p>
								<p class="tit">手机</p>
							</div>
						</div>
					</div>
				</router-link>
			</div>
		</div>
	</div>
</template>
<script>
import { mapActions, mapState } from "vuex"
import isEmpty from "lodash/isEmpty";
export default {
	data() {
		return {
			sex: 0 //0表明女
		}
	},
	mounted: function() {
		let that = this;
		if (this.$route.name == "agentsboy") {
			this.sex = 1;
			if (!isEmpty(that.agentsListData)) return;
			this.getAgentsListData(1)  //触发导入的action的名称
		} else {
			this.sex = 2;
			if (!isEmpty(that.agentsListData)) return;
			this.getAgentsListData(2)
		}
	},
	methods: {
		...mapActions([  //这里读取vuex的action,引入须要的action
			'getAgentsListData',
		]),
	},
	computed: {
		...mapState({   //这里是读取store中的每一个存储的变量
			agentsListData: state => state.agentsModule.agentsListData,  //agentsModule就是表明独立的那个store模块,下的哪一个存储变量
reqState: state => state.request }), }, } </script> <style scoped rel="stylesheet/scss" lang="scss"> </style>

  以上就是vuex在view中的基本引入,主要是经过mapState来导入须要的module,mapActions来导入须要的action名称,而后在页面中使用.微信

 

基本上vuex的使用思路就是在view中触发action,而后action再经过vuex提供的改变store的方法的commit来改变store中的变量,store中变量的改变就会触发view的改变,这就是一种mvvm模式.dom

mvvm就是model、modelview、view,具体本身百度这个模式。mvvm

vuex中action表明的角色就是modelview,负责做为view和store的中间人,view不能直接改变store,只能读取,因此store是单向流向view的。action能够读取store中的数据,也能够改变store中的数据,固然得须要用vuex提供的方法来改变和读取,好比commit负责改变store中的数据,读取的话,能够经过store总接口来读取,好比:

Store.state.agentsModule.agentDetailAll[params]

这里的store就是vuex总的接口,这个接口能够作不少事情,好比读取module里的数据或触发action等。

 

 基本mvvm模式就是如图这样作到的。

相关文章
相关标签/搜索