Vue3商店后台管理系统设计文稿篇(七)
创始人
2024-05-19 17:14:31
0

记录使用vscode构建Vue3商店后台管理系统,这是第七篇,主要记录系统登录页面的创建过程,包含完整vue登录页面代码;Vuex的相关知识以及具体的使用,对state中值得获取,修改,异步修改,分模块用法进行详细记录,包含完整代码示例

文章目录

  • 一、登录页面的创建
  • 二、Vuex 是什么?
    • 查看默认state中定义的count值
    • 修改默认的count值
    • 异步操作修改count值
    • 获取count值
  • 三、 store 分模块用法


正文内容:

一、登录页面的创建

  1. 创建LoginView.vue文件,在路由列表添加登录页面的相关路由信息,如下所示:
 {path: "/login",name: "loginView",component: () => import("../views/login/LoginView.vue"),}
  1. 编辑LoginView.vue文件,具体代码如下所示:


  1. 在浏览器输入地址http://localhost:8080/login,查看登录页面效果如下:
    在这里插入图片描述

二、Vuex 是什么?

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 + 库。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

查看默认state中定义的count值

  1. 在state里面创建count
import {createStore} from "vuex";export default createStore({// 全局的状态初始值state: {count: 1,},// 计算state,获取对应值getters: {},// 更新状态的方法,更新state的唯一方法,commit mutationsmutations: {},// 可以异步操作,可以返回promise,更改数据还是传递到mutations进行更改actions: {},// 数据比较多的时候,分模块modules: {},
});
  1. 引入useStore,获取store对象,在登录按钮下边添加p标签,用于显示默认的count值
import { useStore } from "vuex"export default {name: "login",setup() {const store = useStore()const storeNum = store.state.count;const data = reactive({num: storeNum,})return {...toRefs(data),}}
}
  1. 运行效果如下图所示:
    在这里插入图片描述

修改默认的count值

  1. 在mutations里面创建修改count值的方法setCount;setCount方法共有两个参数,第一个参数是state,第二个参数是调用这个方法的时候传递的具体数据值
import {createStore} from "vuex";export default createStore({// 全局的状态初始值state: {count: 1,},// 计算state,获取对应值getters: {},// 更新状态的方法,更新state的唯一方法,commit mutationsmutations: {setCount(state, num) {state.count = num;},},// 可以异步操作,可以返回promise,更改数据还是传递到mutations进行更改actions: {},// 数据比较多的时候,分模块modules: {},
});
  1. 设置登录按钮的点击事件为更改count数值
import { reactive, toRefs } from "vue"
import { useStore } from "vuex"export default {name: "login",setup() {const store = useStore()const storeNum = store.state.count;const data = reactive({num: storeNum,})const submitForm = function (ruleFormRef) {console.log("login");//通过commit方法更改count值,第一个参数是mutations里面具体的方法名称,第二个参数是count的修改值store.commit("setCount", 100);console.log(store.state.count);}return {...toRefs(data),submitForm}}
}
  1. 运行效果如下图所示:
    在这里插入图片描述
    此时count的值并没有双向绑定

异步操作修改count值

  1. 在actions 里面定义setCountPromise方法,具体代码,如下所示:
import {createStore} from "vuex";export default createStore({// 全局的状态初始值state: {count: 1,},// 计算state,获取对应值getters: {},// 更新状态的方法,更新state的唯一方法,commit mutationsmutations: {setCount(state, num) {state.count = num;},},// 可以异步操作,可以返回promise,更改数据还是传递到mutations进行更改actions: {setCountPromise(context, num) {return new Promise((resolve, reject) => {if (num > 100) {reject("数值不能大于100");} else {context.commit("setCount", num);resolve();}});},},// 数据比较多的时候,分模块modules: {},
});
  1. 修改登录按钮的点击事件,具体代码如下所示
const submitForm = function (ruleFormRef) {//通过dispatch方法更改count值,第一个参数是actions里面具体的方法名称,第二个参数是count的修改值store.dispatch("setCountPromise", 101).then(resp => { console.log(store.state.count); }).catch(err => { console.log(err) });
}
  1. 当count的修改值为101时,运行效果如下所示:
    在这里插入图片描述
  2. 当count的修改值为100时,运行效果如下所示:
    在这里插入图片描述

获取count值

  1. 在getters里面添加getCount方法,具体代码如下所示:
import {createStore} from "vuex";export default createStore({// 全局的状态初始值state: {count: 1,},// 计算state,获取对应值getters: {getCount(state) {return state.count <= 1;},},// 更新状态的方法,更新state的唯一方法,commit mutationsmutations: {setCount(state, num) {state.count = num;},},// 可以异步操作,可以返回promise,更改数据还是传递到mutations进行更改actions: {setCountPromise(context, num) {return new Promise((resolve, reject) => {if (num > 100) {reject("数值不能大于100");} else {context.commit("setCount", num);resolve();}});},},// 数据比较多的时候,分模块modules: {},
});
  1. 修改登录按钮的点击事件
 const submitForm = function (ruleFormRef) {store.commit("setCount", 100);console.log(store.getters.getCount);
}
  1. 运行效果如下图所示:
    在这里插入图片描述
    在之前我们通过store.state.count也可以获取count值,但是为什么还需要store.getters.getCount这种方式获取count值;首先笔者发现这是一种解耦的操作,通俗的将就是模块之间的耦合度降低,方便代码后期维护管理;通过store.getters.getCount这种方式,对count的操作独立出来,代码后期需要更改时是十分方便的

三、 store 分模块用法

  1. 新建文件夹state,用于存储分模块的state数据,新建Number.state.js文件用于存储一个模块的state数据,文件树如下图所示:
    在这里插入图片描述
  2. 在Number.state.js写入state数据以及相关操作方法,具体代码如下所示:
export default {//开启namespace:true,该模块就成为命名空间模块namespaced: true,// 全局的状态初始值state: {count: 1,},// 计算state,获取对应值getters: {getCount(state) {return state.count <= 1;},},// 更新状态的方法,更新state的唯一方法,commit mutationsmutations: {setCount(state, num) {state.count = num;},},// 可以异步操作,可以返回promise,更改数据还是传递到mutations进行更改actions: {setCountPromise(context, num) {return new Promise((resolve, reject) => {if (num > 100) {reject("数值不能大于100");} else {context.commit("setCount", num);resolve();}});},},
};
  1. 在index.js导入Number.state.js,并在modules添加number,具体代码如下所示:
import {createStore} from "vuex";
import number from "./state/Number.state.js";
export default createStore({// 数据比较多的时候,分模块modules: {number},
});
  1. 使用state数据值count,注意用法已经改变,具体代码如下所示:

  1. 运行效果如下图所示:
    在这里插入图片描述

相关内容

热门资讯

韩愈《劝学篇》全文 韩愈《劝学篇》全文  《进学解》是元和七、八年间韩愈任国子博士时所作,是韩愈所创作的一篇关于劝学的文...
李鳝《蕉石图》鉴赏 李鳝《蕉石图》鉴赏  李鳝出身富豪之家,早年曾以画人内廷供奉,后来则转任山东滕县知县。李鳝画《蕉石图...
张俭传文言文阅读及答案 张俭传文言文阅读及答案  张俭字元节,山阳高平人,赵王张耳之后也,父成,江夏太守。俭初举茂才,以刺史...
心经全文注音朗诵 心经全文注音朗诵  导语:凡人要度苦厄,了生死,成大觉,非从自心下手不可。以下小编为大家介绍心经全文...
范元琰良善文言文翻译 范元琰良善文言文翻译  范元琰,字伯珪,吴郡钱塘人也。小编整理的范元琰良善文言文翻译,欢迎大家前来查...
韩非子权术全文译文 韩非子权术全文译文  引导语:《韩非子权术》这篇课文想必很多人都读过,那么相关的韩非子权术的全文以及...
《不食嗟来之食》原文注释及翻... 《不食嗟来之食》原文注释及翻译  《不食嗟来之食》,选自《礼记。檀弓》。《礼记》,是中国古代一部重要...
青门引 张先 赏析 青门引 张先 赏析 千秋岁 数声鶗鴂 张先,是作者写的一篇伤春词,同时抒发自己寥落寂寞的处境。本文由...
苏东坡红梅原文及翻译 苏东坡红梅原文及翻译  宋神宗元丰五年(1082),当时苏轼贬官在黄州,因读石延年《红梅》诗引起感触...
父亲节英文祝福语 父亲节英文祝福语(精选50句)  有一种深情叫做父子连心,有一种真爱叫做父爱如山。父亲的爱庄重而深刻...
《吕氏春秋》的社会治理观 《吕氏春秋》的社会治理观《吕氏春秋》一书的根本宗旨是一个“治”字.它全面吸收前人的社会治理思想,融汇...
《沉醉东风》原文翻译 《沉醉东风》原文翻译(通用7篇)  沉醉东风的作者是关汉卿,元代杂剧作家,号已斋叟(一作一斋),约生...
王羲之兰亭序鉴赏 王羲之兰亭序鉴赏  兰亭集序是中国晋代(公元353年),书圣王羲之在浙江绍兴兰渚山下以文会友,写出“...
人间词话原文及翻译 人间词话原文及翻译  《人间词话》为“双色图文传世经典”之一,该系列是一套普及性读物,对象主要是具有...
荀子劝学说理方式 荀子劝学说理方式  《劝学》是《荀子》的开篇之作,值得反复涵泳咀嚼,看看下面的相关文章,看看下面的劝...
梦游天姥吟留别的赏析 梦游天姥吟留别的赏析精选  导语:《梦游天姥吟留别》是唐代大诗人李白创作的一首古体诗。此诗是记梦诗,...
清明节修坟的风水注意事项 清明节修坟的风水注意事项  阴阳风水按五行,生克制化各用功;八卦吉凶方位定,推开九宫也显能;修坟立碑...
《胡铨传》原文及译文解析的内... 《胡铨传》原文及译文解析的内容  胡铨字邦衡,庐陵人。建炎二年,高宗策士淮海,铨因御题问“治道本天,...
《黄河颂》原文 《黄河颂》原文  《黄河大合唱》是现代诗人光未然于1939年创作的一首现代诗。此诗是一首反映抗日救亡...
《资治通鉴·长平之战》原文及... 《资治通鉴·长平之战》原文及译文 《资治通鉴》(常简作《通鉴》):由北宋司马光主编的一部多卷本编年...