Vue:登录/注销后标题不会更新,但 localStorage 已更改 [英] Vue: header doesn't get renewed after login/logout but localStorage is changed

查看:51
本文介绍了Vue:登录/注销后标题不会更新,但 localStorage 已更改的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我使用表单登录时,会发生这种情况:

  1. localStorage 中的登录值更改为true"
  2. 路由器推送到/home
  3. 标题没有改变,仍然显示登录/注册按钮

我需要它

  1. localStorage 中的登录值更改为true"
  2. 路由器推送到/home
  3. 标题更改和图片

Header.vue:

 

<HeaderItem v-if="!isLoggedIn";类=pl-10"text =登录"链接=/登录"/><HeaderItem v-if="!isLoggedIn";类=pl-10"text =注册"链接=/注册"/><div v-if="isLoggedIn"><用户头/>

导出默认{name: '应用程序',组件:{HeaderItem,UserHeader},数据() {返回 {主页链接:/home"}},创建:{isLoggedIn() {console.log(JSON.parse(localStorage.getItem("loggedIn")) === "true");if (localStorage.getItem("loggedIn") === "true") {console.log(存储记录为真");}别的  {console.log(存储记录错误");}return localStorage.getItem("loggedIn") === "true";}}}

它只在我按下 Ctrl+Shift+R 后打印正确的消息并更改标题.但是 localStorage 立即具有正确的 loggedIn 值.我该如何解决?

编辑:

我也试过这个:

 

<HeaderItem v-if="!loggedIn";类=pl-10"text =登录"链接=/登录"/><HeaderItem v-if="!loggedIn";类=pl-10"text =注册"链接=/注册"/><div v-if="loggedIn"><用户头/>

导出默认{name: '应用程序',组件:{HeaderItem,UserHeader},数据() {返回 {homeLink: "/home",//登录:假}},计算:{登录() {return localStorage.getItem("loggedIn") === "true";},...

结果相同:页眉仅在页面刷新(Ctrl+Shift+R)后发生变化.

解决方案

created 是 vue.js 的生命周期或钩子,在其中定义的任何函数/方法都无法运行.

在您的情况下,您想用作变量,然后使用 computed 属性.

这是您的代码的修复版本:

计算:{isLoggedIn() {console.log(JSON.parse(localStorage.getItem("loggedIn")) === "true");if (localStorage.getItem("loggedIn") === "true") {console.log(存储记录为真");}别的  {console.log(存储记录错误");}return localStorage.getItem("loggedIn") === "true";}},

更新:

如果您希望您的函数在同一组件上具有反应性,请创建一个变量并在您设置 localStorage 登录值的位置设置其值.

这只是一个示例代码: