前端学习(十一)导航栏登录功能

一般网站的右上角,都是一个用户登录的按钮,用户登录完就显示用户的头像,点击进去就是个人中心。本文就为实现这个功能。

组件实现

在右上角添加这么个模块,他实现的效果是下面这样的,
这是没登录时的样子:
未登录时
这是登录后的效果:
在这里插入图片描述
当然以后如果有头像了,把这个图标换成头像就更生动了
首先就把这个视图的功能先写出来:
我新建了个文件“src\views\login\menuLoginBar.vue”:

<template>
  <el-dropdown style="float: right">
    <div>
      <router-link v-if="!getLoginStatus()" to="/login" style="color: white">登录</router-link>
      <i v-if="getLoginStatus()" class="el-icon-user-solid" style="color: white">
        <el-dropdown-menu>
          <el-dropdown-item>
            <span>退出登录</span>
          </el-dropdown-item>
        </el-dropdown-menu>
      </i>
    </div>
  </el-dropdown>
</template>

<script>
import storageUtil from "../../utils/storageUtil"

export default {
  name: "loginView",
  data() {
    return {
      msg: this.getLoginStatus()
    }
  },
  methods: {
    getLoginStatus() {
      if (!window.localStorage) {
        alert("浏览器不支持localstorage,请更换更高版本的浏览器")
        return false
      } else return storageUtil.get("isLogin") != null;
    }
  }
}
</script>

这里用到el-dropdown,就是实现那个鼠标移动到这个弹出下面的选项。

      <router-link v-if="!getLoginStatus()" to="/login" style="color: white">登录</router-link>
      <i v-if="getLoginStatus()" class="el-icon-user-solid" style="color: white">

看这两行,第一行是未登录时显示的,第二行是登录时显示的,他们切换显示靠的是v-if=“getLoginStatus()”,getLoginStatus()这个方法就是查询是否登录了,之后再具体讲。

el-dropdown-menu就是下拉菜单的子菜单项。基本功能就这么些。

引入到导航栏

      <el-menu-item style="float: right">
        <menuLoginBar></menuLoginBar>
      </el-menu-item>

这个好办,就在导航栏代码里新增一个子模块就可以了。
当然也要先导入模块:

<script>
import menuLoginBar from "@/views/login/menuLoginBar";

export default {
  name: 'App',
  components: {menuLoginBar}
}
</script>

查询登录状态

一般网站登录后都是会保持一段时间的登录状态的,即使关闭页面再打开登录状态也还在,这样减少用户登录的次数,会方便很多,这个取决于业务。
那么如何做呢?就是使用localStorage,做一个本地存储,但是localStorage是不会过期的,除非人为删除他,所以得对他进行封装,给他添加一个过期功能。
所以我还新增了一个工具类:

let storageUtil =  {
    set : function (key, value, expiredM) {
        /**
         * set 带过期时间的存储方法
         * @ param {String}     key 键
         * @ param {String}     value 值,
         * @ param {String}     expired 过期时间,以分钟为单位
         */
        let expiredTime = Date.now() + expiredM * 60000
        let item = {
            value: value,
            expired: expiredTime
        }
        let itemStr = JSON.stringify(item)
        localStorage.setItem(key, itemStr)
    },

    get :function (key) {
        /**
         * get 获取方法,须与set配套使用
         * @ param {String}     key 键
         */
        let valueStr=localStorage.getItem(key)
        if (valueStr!=null){
            let item=JSON.parse(valueStr)
            if (Date.now()>=item.expired){
                localStorage.removeItem(key)
                return null
            }else {
                return item.value
            }
        }else {
            return null
        }
    }
};
export default storageUtil;

我就不具体讲了,这些工具类网上一搜大把。
在有了工具类之后,在登录界面(之前文章里已实现),就得添加登录成功后持久化存储登录状态的语句:

storageUtil.set("isLogin",true,30)

这里就不展开讲了,其实这里要学习的是怎么添加工具类,以及怎么引用它。可以以我这个工具类为模板把,然后引用就:

import storageUtil from "@/utils/storageUtil"

功能改进

以上实现还存在问题,就是未登录时点击登录,登录成功之后,会自动跳转到首页,但是右上角这个状态他不会改变,因为没刷新,它没有重新判断当前的登录状态,手动刷新一下页面即可更新。
但是我们想要的效果肯定不能是这样的,所以当我们主动发生登录状态变更的时候(被动就不需要考虑了,比如登录信息过期),比如手动登录,手动退出登录时。

PS:篇幅和时间原因,代码贴的不完整,想看具体的代码去:https://gitee.com/lsjWeiYi/vue-frame,不过这里的代码也不完全和博客上的一模一样,后面可能我有做更改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lsjweiyi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值