Vuex在uniapp项目中应用案例

项目引入Vuex

首先在项目中引入如下目录结构

在这里插入图片描述

其中,index.js 文件内容如下:

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

Vue.use(Vuex)

const modulesFiles = require.context('./modules', true, /\.js$/)
const modules = modulesFiles.keys().reduce((modules, modulePath) => {
    const moduleName = modulePath.replace(/^\.\/(.*)\.\w+$/, '$1')
    const value = modulesFiles(modulePath)
    modules[moduleName] = value.default
    return modules
}, {})

const store = new Vuex.Store({
    modules
})

export default store

项目的main.js中全局引入Vuex

import Vue from 'vue'
import App from './App'
import store from './store'
import plugin from './js_sdk/uni-admin/plugin'
import cuCustom from './colorui/components/cu-custom.vue'  //colorUI
import Request from './js_sdk/request/luch-request/index'
import tool from './js_sdk/common/tool'


Vue.prototype.$http = new Request()


Vue.component('cu-custom',cuCustom);
Vue.config.productionTip = false

Vue.use(plugin)
Vue.use(tool)

App.mpType = 'app'

const app = new Vue({
    store,
    ...App
})
app.$mount()

初始化Store相关结构

建立buildArchives.js文件,定义store数据结构,方便待会操作store

export default {
    namespaced: true,
    //定义数据结构
    state: {
       optionsData : [],   //初始数据
       checkedIndex: [],   //选中的下标
       checkedData : [],   //选中的
       checkedSaveData    : [],   //确认选中的
       deleteData  : [],   //删除的数据(用于在选择列表做取消选择处理)
	   farmerId:""
    },
    //提供获取数据接口
    getters: {
		getOptionsData : (state) => state.optionsData,
		getCheckedIndex: (state) => state.checkedIndex,
		getCheckedSaveData    : (state) => state.checkedSaveData,
		getCheckedData : (state) => state.checkedData,
		getFarmerId : (state) => state.farmerId,
    },
    //操作数据
    mutations: {
		INIT_DATA: (state) => {
			state.optionsData  = []
			state.checkedIndex = []
			state.checkedSaveData     = []
			state.checkedData  = []
			state.deleteData   = []
		},
		SET_CHECKED_INDEX:(state,data) => {
			state.checkedIndex = data
		},
        SET_OPTIONS_DATA:(state,data) => {
			state.optionsData = data
		},
		SET_FARMER_ID:(state,data) => {
			state.farmerId = data
		},
		SELECT_OPTIONS_DATA:(state,index) => {
			// 选中 or 取消
			state.optionsData[index].checked = !state.optionsData[index].checked
			// 保存选中的下标
			if(state.optionsData[index].checked){
				state.checkedIndex.push(index)
			}else{
				state.checkedIndex.splice(index,1)
			}
			// 已选择的
			if(state.checkedIndex.length){
				state.checkedData.length = 0
				state.checkedIndex.forEach(index => {
					state.checkedData.push(state.optionsData[index])
				})
			}else {
				state.checkedData.length = 0
			}
		},
		// 保存选中的数据
		SAVE_OPTIONS_DATA:(state) => {
			state.checkedSaveData = []
			if(state.checkedIndex.length){
				state.checkedIndex.forEach(index => {
					state.checkedSaveData.push(state.optionsData[index])
				})
			}
		},
		// 移除已选择的数据
		DELETE_CHECKED_DATA:(state,index)=>{
				state.optionsData.forEach((item,i) => {
					if(state.checkedData[index].label === item.label){
						state.optionsData[i].checked = false
						// state.checkedIndex.splice(index,1)
					}
				})
				state.checkedIndex.forEach(i => {
					if(state.checkedData[index].index===i){
						state.checkedIndex.splice(i,1)
					}
				})
			state.checkedData.splice(index,1)
		}
    },
    //调用操作数据模块
	actions: {
		setOptionsData({commit},data){
			commit('SET_OPTIONS_DATA',data)
		},
		setFarmerId({commit},data){
			commit('SET_FARMER_ID',data)
		}
	}
}

修改store中数据

 this.$store.commit('buildArchives/SET_FARMER_ID', farmerId);

buildArchives/SET_FARMER_ID中buildArchives代表文件名称

获取store中数据

//1.导入
import { mapGetters } from 'vuex'

//2.监听数据
computed: {
...mapGetters('buildArchives',['getFarmerId']),
//上传地址
serverUrl() {
return config.uploadUrl+"?token="+this.$store.state.user.token;
},

},
    
//3.使用
    onLoad(option){
        let {id} = option ;
        if (id) {
            this.formData.archivesRegisterId = id;
            this.earLabelBoo = true;
        }
        //使用
        this.formData.farmerId = this.getFarmerId;
        console.log(this.formData.farmerId);
    },
对于在VSCode配置Vue3、VuexUniapp的开发环境,你可以按照以下步骤进行操作: 1. 首先,确保你已经安装了Node.js和npm(Node.js的包管理器)。你可以在官网上下载并安装它们。 2. 接下来,你需要全局安装Vue CLI。在命令行执行以下命令: ``` npm install -g @vue/cli ``` 3. 创建一个新的Vue项目。在命令行进入你想要创建项目的目录,并执行以下命令: ``` vue create your-project-name ``` 根据提示选择你需要的特性和插件,包括Vuex,以及是否使用TypeScript等。 4. 安装Uniapp插件。在命令行进入项目目录,并执行以下命令: ``` vue add uni-app ``` 根据提示选择适用于你的平台(如H5、微信小程序等)以及是否使用TypeScript等。 5. 配置Vuex。在项目目录找到src目录,然后创建一个store目录,在其创建一个index.js文件。在index.js编写你的Vuex配置,例如: ```javascript import { createStore } from 'vuex' const store = createStore({ state: { // 状态 }, mutations: { // 修改状态的方法 }, actions: { // 异步操作 }, getters: { // 计算属性 } }) export default store ``` 然后,在src目录的main.js引入Vuex并使用它: ```javascript import { createApp } from 'vue' import App from './App.vue' import store from './store/index' createApp(App).use(store).mount('#app') ``` 6. 在VSCode打开你的项目,在扩展商店搜索并安装VueVuexUniapp相关的插件,例如"Vetur"和"uniapp-snippet"等。这些插件将提供语法高亮、代码提示和其他开发工具。 现在,你已经成功配置了VSCodeVue3、VuexUniapp开发环境。你可以开始开发你的项目了。祝你好运!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值