javascript - 使用 this.$router.go(-1); 后如何重新加载 localStorage VueJS;
问题描述
这是我的 Login.vue:
mounted() {
if (localStorage.login) this.$router.go(-1);
},
methods: {
axios.post(ApiUrl + "/login") {
...
}
then(response => {
...
localStorage.login = true;
this.$router.go(0); /* Reload local storage */
})
}
应用程序.vue:
mounted() {
axios
.get("/user")
.then(response => {
localStorage.user_id = response.data.user.id;
localStorage.package_id = response.data.user.package_id;
})
},
项目.vue:
mounted() {
this.user_id = localStorage.user_id
this.package_id = localStorage.package_id
}
localStorage.user_id
使用上面的代码,我无法得到localStorage.package_id
预期的结果。但如果我像下面这样改变,它就起作用了。
mounted() {
const self = this
setTimeout(function () {
self.user_id = localStorage.user_id
self.package_id = localStorage.package_id
self.getProject();
},1000)
}
但我认为setTimeout
在那种情况下不好。有没有办法重构这段代码?谢谢!
解决方案
不知道你的项目结构,但我想这可能是一个异步问题。您获得了异步用户信息,因此在Project.vue
挂载时,请求尚未完成。结果,本地存储目前是空的。
有两种解决方案:
确保
Project.vue
在 userinfo 完成之前不呈现。例如,<project v-if="userinfo.user_id" />
应该工作。使用一些数据绑定库,比如
vuex
将 userinfo 绑定到,而不是像orProject.vue
那样在生命周期中分配它。mounted
created
希望能帮助到你。
推荐阅读
- python - 打印频繁值时修复代码,python
- adsense - Google adsense 显示空白广告
- microsoft-graph-api - 在 Azure Function 中使用 App Only 权限获取 Team's Planner
- powershell - 使用 powershell 脚本通过文本文件连接多个 AD 服务器
- javascript - 使功能实体返回对象和函数的最佳实践
- python-import - 尝试将 C# 代码导入 Python 脚本时出现导入错误
- grails - 有没有人使用 Grails 4 / Java 11 并在开发过程中使用 DCEVM 进行热交换取得成功?
- vue.js - 如何通过 Web URL 从 .js 文件中导入外部 Vue 组件?
- node.js - Koa-cookie 没有获取“=”的价值?
- c++ - 为什么我的 C++ 程序不能得到我之前分配的值而不是随机双精度值?