我是靠谱客的博主 瘦瘦滑板,最近开发中收集的这篇文章主要介绍vue——vuex在vue-element-admin项目中的简单应用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

项目需求是:如图,点击左侧el-tree的节点,在点击右侧新建用户时,把点击的节点的部门名称赋值给表单中的部门机构项,同时点击节点时,表格自动刷新,显示该部门下的数据。
原本打算用全局变量来进行这个赋值,同时用watch监听这个变量的变化,调用刷新函数,但是组长说最好用vuex来完成,于是就打算尝试一下啦。在这里插入图片描述
首先看一下项目中与vuex有关的目录:

1、modules文件夹中存放的是各个模块的状态,因此我们可以新建一个account.js来存放该页面的状态。

const account = {
  state: {		//state用来存放状态
    group_id: ''		//要监听的状态
  },
  mutations: {			//mutations用来修改状态,mutations中存放的都是修改状态的方法
    SET_GROUPID: (state, group_id) => {			//改变状态的唯一途径就是提交(commit)mutations来修改
      state.group_id = group_id
    }
  },
  actions: {}
}
export default account		

2、getters相当于computed计算属性,他会缓存返回值,只有当状态发生变化是才会重新计算。可以用于监听state中状态的变化并返回计算后的结果。我的项目中暂时未涉及到计算,因此只是简单的返回变化后的状态。

const getters = {
	group_id: state => state.account.group_id
}
export default getters

在vue-element-admin项目中很多东西都是提前配置好的,因此我们在index.js文件里不需要再写其他东西了,到这一步就可以直接在页面中使用了,但是还是看一下index.js的结构吧。

import Vue from 'vue'
import Vuex from 'vuex'
import getters from './getters'

Vue.use(Vuex)

const modulesFiles = require.context('./modules', true, /.js$/)

// you do not need `import app from './modules/app'`
// it will auto require all vuex module from modules file
const modules = modulesFiles.keys().reduce((modules, modulePath) => {
  // set './app.js' => 'app'
  const moduleName = modulePath.replace(/^./(.*).w+$/, '$1')
  const value = modulesFiles(modulePath)
  modules[moduleName] = value.default
  return modules
}, {})

//定义store并注册modules,getters
const store = new Vuex.Store({
  modules,
  getters
})

export default store

3、接下来就可以在页面中愉快的调用状态啦。

<script>
//省略一些没必要的东西啦

//首先在computed中引入这个状态
computed: {
	groupid() {
		return this.$store.state.account.group_id
	}
}
//然后可以再watch中监听这状态的变化,如果点击其他节点,会自动刷新右边表格
watch: {
	groupid(newVal,oldVal) {
	if(newVal) {
		//具体刷新内容酌情修改
		this.listQuery.group_id = newVal	//接口的查询条件变化
		this.getList()						//重新调用接口查询新的数据(刷新)
		}
	}
}
methods: {
	getList(){  //我调用接口的函数 },
	//点击节点调用的函数
	handleNodeClick(data) {
		//提交(commit)mutations修改store中存放的groupid的值
		this.$store.commit('SET_GROUPID',data.id)
	},
	createDialog() {
		this.resetTemp() //这是重置表单数据的函数
		this.temp.group_id = this.groupid //把groupid赋值给表单中部门机构的属性
	}
}
</script>

这里有一个很奇怪的问题一直不太能理解,在resetTemp()方法中重置表单数据时:

method: {
	resetTemp() {
		//直接给空值,虽然能给部门赋值,但是如果点击下拉框选择其他部门,刚选择完毕时,值不会发生变化
		//但是如果在修改其他表单数据,比如填写一下姓名或任何其他内容,这里的部门机构选项会变化为刚刚选择的内容
		this.temp = {} 
		//但是这样就可以直接修改了
		this.temp = {
			group_id:''
		}
	}
}

希望有大佬看到这个问题的话可以帮我解答一下!感激不尽!



☆前端新手记录一下自己学习的过程,如有问题望大神指出!☆

最后

以上就是瘦瘦滑板为你收集整理的vue——vuex在vue-element-admin项目中的简单应用的全部内容,希望文章能够帮你解决vue——vuex在vue-element-admin项目中的简单应用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(68)

评论列表共有 0 条评论

立即
投稿
返回
顶部