首页 > 其他分享 >vue项目:如何在编辑用户信息后,能够及时更新layout下的navar组件中的用户名,而不是手动刷新?

vue项目:如何在编辑用户信息后,能够及时更新layout下的navar组件中的用户名,而不是手动刷新?

时间:2023-12-05 18:14:43浏览次数:25  
标签:getUserInfo vue layout name res 组件 navar

问题描述:layout下的navar组件中展示用户名,初始化时进入layout层会进入mouted中请求接口数据展示名称,但是在编辑弹框中编辑成功后,关闭弹框,此时不会走layout的mouted,因为layout组件的mouted已经加载过一次了,不手动刷新浏览器是不会走mouted生命周期的。那怎么解决这个不能及时更新数据的问题呢?

 我们可以用vuex实现,将获取用户信息的接口放在vuex中,在修改成功并关闭弹框时,通过dispatch请求数据并更新vuex中存入的name。在navar组件中通过mapGetters获取新的name数据。这样就能实现及时更新name的需求了。以下是主要代码:

1、layout页-----navar组件

<span class="user-name">{{ userName && name }}</span>
// 这里写两个变量是因为computed中不能使用name就不能在data中定义相同的变量名。注意是&& 不是 ||
 1 import { mapGetters } from "vuex";
 2 export default {
 3     data() {
 4         return {
 5            userName: ''
 6         }
 7     },
 8     computed: {
 9         ...mapGetters(["name"])
10     },
11     mounted() {
12         this.getInfo();
13     },
14     methods: {
15         // 初始化时,获取用户名称
16         getInfo() {
17             this.$store.dispatch("user/getUserInfo").then((res) => {
18                 this.userName = res.data[0].userName;
19             });
20         }
21     }
22 }
23     

2、编辑用户信息弹框组件

 1 confirmAll() {
 2     updateUserInfo(value).then((res) => {
 3         if (res.status === 0) {
 4             this.$message({
 5                 message: "保存成功",
 6                 type: "success"
 7             });
 8             this.getEditProfileInfo();
 9             this.close();
10         }
11     })   
12 },
13 getEditProfileInfo() {
14        this.$store.dispatch("user/getUserInfo").then((res) => {
15            this.formData = res.data[0];
16        });
17 }

3、store---user.js

 1 import { getUserInfo } from '@/api/user'
 2 const getDefaultState = () => {
 3     return {
 4         name: ''
 5     }
 6 }
 7 const state = getDefaultState()
 8 const mutations = {
 9     SET_NAME: (state, name) => {
10         state.name = name
11     }
12 }
13 const actions = {
14     getUserInfo({ commit }) {
15         return new Promise((resolve, reject) => {
16             getUserInfo().then(response => {
17                 commit('SET_NAME', response.data[0].userName)
18                 resolve(response)
19             }).catch(error => {
20                 reject(error)
21             })
22         })
23     },
24 }

 

标签:getUserInfo,vue,layout,name,res,组件,navar
From: https://www.cnblogs.com/heisetianshi/p/17877825.html

相关文章

  • vue中引用utils中的方法
    utils中的目录解构如下(utils在src目录下),以深拷贝为例:deepClone文件的代码如下:functiondeepClone(substance){if(typeofsubstance!=='object'||substance==null){returnsubstance;}constresult=Array.isArray(substance)?[]:{};for(constkey......
  • 计算机毕业设计springcloud vue商城源码
    开发环境及工具:大等于jdk1.8,大于mysql5.5,idea(eclipse),nodejs,vscode(webstorm)技术说明:springcloudspringbootmybatisvueelementui代码注释齐全,没有多余代码,适合学习(毕设),二次开发,包含论文技术相关文档。功能介绍:用户端:登录注册首页显示搜索商品,轮播图,商品分类,点击分类展示对应商,(......
  • 解决vue-django配置问题
    后端跨域问题django安装pipinstalldjango-cors-headers添加应用,主应用下的settingINSTALLED_APPS=[...#跨域'corsheaders',...]中间件设置MIDDLEWARE=[...#跨域中间键设置'corsheaders.middleware.CorsMiddleware', ...]添加黑白名单(se......
  • vue的响应式原理:依赖追踪
    在明白原理之前,我们有很多表面现象、使用场景需要记忆。明白了原理后,你会发现它们已经不需要记了,因为从原理出发,你自己都能把它们推导出来,一切是那么的自然而然。感觉就是:这还用记吗?很明显嘛!之前我对vue的响应式原理,只是一知半解,导致开发中经常会出现疑问,比如:为什么有的数据它不......
  • [转]vue3+tsx开发语法详解
    原文地址:vue3+tsx开发语法详解-知乎很多组件库都使用了TSX的方式开发,主要因为其灵活性比较高,TSX和SFC开发的优缺点就不介绍了,这里主要说一下将SFC项目改造为TSX的过程。安装JSX库pnpminstall@vitejs/plugin-vue-jsx-D安装完之后在vite.config.ts进行插件使用,代码如下......
  • 学习Vue3 第六章(认识Ref全家桶)
    ref接受一个内部值并返回一个响应式且可变的ref对象。ref对象仅有一个 .value property,指向该内部值<template><div><button@click="changeMsg">change</button><div>{{message}}</div></div></template><......
  • vue 配合后端请求异步加载APP.vue
    主要是想在加载路由什么的之前先请求一些配置参数,毕竟我的情况是首页要根据不同的配置显示不同的路由组件一般加载App.vue是这么写的import{createApp}from'vue'importAppfrom'./App.vue'createApp(App).mount('#app')异步加载的话,天才我深思熟虑后是这么写的。我......
  • Vite4+Typescript+Vue3+Pinia 从零搭建(6) - 状态管理pina
    项目代码同步至码云weiz-vue3-templatepina是vue3官方推荐的状态管理库,由Vue核心团队维护,旨在替代vuex。pina的更多介绍,可从pina官网查看特点更简洁直接的API,提供组合式风格的API支持模块热更新和服务端渲染对TS支持更为友好安装npmipinia使用1.创建......
  • uniapp+vue3 优惠券样式
    效果如图:template部分:<viewclass="item"><viewclass="box"><viewclass="content"><viewclass="head">优惠券</view><viewclass="content-box1">......
  • Vue3 实现网页水印
    一些公司和组织出于系统文件或信息安全保密的需要,需要在系统网页上增加带有个人标识的水印。首先我们来看这样一个水印功能的实现思路,通常是在我们原有的网页上附上一个DIV层,将它设置绝对定位铺满整个窗口,然后z-index值尽量往大了设,保证让水印层处于当前网页所有元素的上面,又不......