vue.js中实现登录控制的方法示例


Posted in Javascript onApril 23, 2018

本文实例讲述了vue.js中实现登录控制的方法。分享给大家供大家参考,具体如下:

vue中使用vue-router实现登录的控制在做后台管理系统中很常见,但是不想之前熟悉的流程那样,不过只要大家理解vue-router的使用也是很好实现的。

首先我们需要编写登录页面和主页面:

<template>
 <div class="login">
  <table width="100%" height="100%">
   <tr height="41"><td class="logintb" colspan="2"> </td></tr>
   <tr height="100%" class="loginbg">
    <td id="left_cont">
     <table width="100%" height="100%">
      <tr height="155"><td colspan="2"> </td></tr>
      <tr>
       <td width="20%" rowspan="2"> </td>
       <td width="60%">
        <table width="100%">
          <tr height="70"><td align="right"></td></tr>
          <tr height="274">
            <td valign="top" align="right">
              <img src="../../static/images/logo.png"/>
             </img/>
            </td>
          </tr>
        </table>
       </td>
       <td width="15%" rowspan="2"> </td>
      </tr>
      <tr><td colspan="2"> </td></tr>
     </table>
    </td>
    <td id="right_cont">
     <table height="100%">
      <tr height="30%"><td colspan="3"> </td></tr>
      <tr>
       <td width="30%" rowspan="5"> </td>
       <td valign="top" id="form">
          <table valign="top" width="50%">
            <tr><td colspan="2"><h4 style="letter-spacing:1px;font-size:16px;">管理后台</h4></td></tr>
            <tr><td>管理员:</td><td><input type="text" v-model.trim="username" value="" /></td></tr>
            <tr><td>密  码:</td><td><input type="password" v-model.trim="pwd" value="" /></td></tr>
            <!-- <tr><td>验证码:</td><td><input type="text" name="" value="" style="width:80px;"/></td></tr> -->
            <tr class="bt" align="center"><td> <input type="submit" @click="login" value="登陆" /></td><td> </td></tr>
          </table>
       </td>
       <td rowspan="5"> </td>
      </tr>
      <tr><td colspan="3"> </td></tr>
     </table>
    </td>
   </tr>
   <tr id="login_bot"><td colspan="2"><p>Copyright © 2017-{{getNowDate()}} Tujiawang</p></td></tr>
  </table>
 </div>
</template>
<script>
 import axios from 'axios'
 axios.defaults.withCredentials = true
 export default{
  data(){
   return {
    username:'',
    pwd:''
   }
  },
  methods: {
   login() {
    var params = new URLSearchParams();
    params.append('username', this.username);
    params.append('password', this.pwd);
    axios.post(this.HOST+'/home/system/login',params).then(res => {
      if(res.data.code ==1){
       sessionStorage.username = this.username;
       this.$router.push({path:'/main'})
      }else{
       alert('登录失败')
      }
    })
   },
   getNowDate(){
    var d = new Date();
    return d.getFullYear();
   }
  }
 }
</script>

上面的登录页面注意:login方法中登录成功需要写入sessionStorage以便路由进行判断

最主要的是路由文件中的内容:

import Vue from 'vue'
import Router from 'vue-router'
Vue.use(Router)
const routes = [
  {
    path: '/',
    redirect: '/login'
  },
  {
    path: '/login',
    name: 'login',
    component: (resolve)=>{require(['../components/Login'],resolve)}
  },
  {
    path: '/main',
    name: 'main',
    component: (resolve)=>{require(['../components/Home'],resolve)},
    redirect: 'main/info',
    children: [{
        path: 'info',
        meta: {
          id:-1
        },
        component: (resolve)=>{require(['../components/Main'],resolve)}
      }
    ]
  },
  {
    path: '/vips',
    name: 'vips',
    component: (resolve)=>{require(['../components/Home'],resolve)},
    redirect: 'vips/list',
    children: [{
        path: 'list',
        meta: {
          id:0
        },
        component: (resolve)=>{require(['../components/VipsList'],resolve)}
      },
      {
        path: 'detail',
        meta: {
          id:0
        },
        component: (resolve)=>{require(['../components/VipsDetail'],resolve)}
      },
      {
        path: 'userlog',
        meta: {
          id:0
        },
        component: (resolve)=>{require(['../components/UserLog'],resolve)}
      }
    ]
  }
];
const router = new Router({
  routes
});
/**
 * to:表示目标路由
 * from:表示来源路由
 * next:表示执行下一步操作
 */
router.beforeEach((to, from, next) => {
  if (to.path === '/login') { // 当路由为login时就直接下一步操作
    next();
  } else { // 否则就需要判断
    if(sessionStorage.username){ // 如果有用户名就进行下一步操作
     next()
    }else{
     next({path: '/login'}) // 没有用户名就跳转到login页面
    }
  }
})
export default router

目前这个只是简单的处理,这种方法官方叫做路由守卫,还有一种写法就是在meta中添加是否需要登录的控制,在beforeEach中来判断,和上面方法一样的。

希望本文所述对大家vue.js程序设计有所帮助。

Javascript 相关文章推荐
一个简单的js渐显(fadeIn)渐隐(fadeOut)类
Jun 19 Javascript
Jquery插件之多图片异步上传
Oct 20 Javascript
中国地区三级联动下拉菜单效果分析
Nov 15 Javascript
通过javascript获取iframe里的值示例代码
Jun 24 Javascript
如何动态加载外部Javascript文件
Dec 02 Javascript
javascript事件委托的用法及其好处简析
Apr 04 Javascript
Canvas放置反弹效果随机图形(实例)
Aug 17 Javascript
关于Angularjs中跨域设置白名单问题
Apr 17 Javascript
解决select2在bootstrap modal中不能正常使用的问题
Aug 09 Javascript
angular6开发steps步骤条组件
Jul 04 Javascript
在vue-cli3中使用axios获取本地json操作
Jul 30 Javascript
Vue使用Element实现增删改查+打包的步骤
Nov 25 Vue.js
JS中获取 DOM 元素的绝对位置实例详解
Apr 23 #Javascript
Vue前端开发规范整理(推荐)
Apr 23 #Javascript
Vue 中mixin 的用法详解
Apr 23 #Javascript
详解Vue2.0配置mint-ui踩过的那些坑
Apr 23 #Javascript
vue2.0 移动端实现下拉刷新和上拉加载更多的示例
Apr 23 #Javascript
详解vue 计算属性与方法跟侦听器区别(面试考点)
Apr 23 #Javascript
JavaScript变量声明var,let.const及区别浅析
Apr 23 #Javascript
You might like
解析php中static,const与define的使用区别
2013/06/18 PHP
PHP 面向对象程序设计(oop)学习笔记 (四) - 异常处理类Exception
2014/06/12 PHP
PHP使用redis实现统计缓存mysql压力的方法
2015/11/14 PHP
laravel5.1框架model类查询的实现方法
2019/10/08 PHP
通过 Dom 方法提高 innerHTML 性能
2008/03/26 Javascript
JavaScript更改class和id的方法
2008/10/10 Javascript
javascript Array.remove() 数组删除
2009/08/06 Javascript
javascript instanceof,typeof的区别
2010/03/24 Javascript
Javascript 函数中的参数使用分析
2010/03/27 Javascript
Extjs中DisplayField的日期或者数字格式化扩展
2010/09/03 Javascript
js 实现菜单左右滚动显示示例介绍
2013/11/21 Javascript
JavaScript事件委托技术实例分析
2015/02/06 Javascript
JS实现超简单的仿QQ折叠菜单效果
2015/09/21 Javascript
JS中多步骤多分步的StepJump组件实例详解
2016/04/01 Javascript
JS从一组数据中找到指定的单条数据的方法
2016/06/02 Javascript
three.js绘制地球、飞机与轨迹的效果示例
2017/02/28 Javascript
CentOS 安装NodeJS V8.0.0的方法
2017/06/15 NodeJs
微信小程序获取手机网络状态的方法【附源码下载】
2017/12/08 Javascript
浅谈webpack构建工具配置和常用插件总结
2020/05/11 Javascript
如何在Express4.x中愉快地使用async的方法
2020/11/18 Javascript
[01:09]2014DOTA2国际邀请赛 TI4西雅图DOTA2 中国美女coser加油助威
2014/07/20 DOTA
wxpython 学习笔记 第一天
2009/02/09 Python
简单的Python的curses库使用教程
2015/04/11 Python
Sanic框架基于类的视图用法示例
2018/07/18 Python
浅谈python 导入模块和解决文件句柄找不到问题
2018/12/15 Python
python+mysql实现教务管理系统
2019/02/20 Python
python连接、操作mongodb数据库的方法实例详解
2019/09/11 Python
Python 实现判断图片格式并转换,将转换的图像存到生成的文件夹中
2020/01/13 Python
python中Array和DataFrame相互转换的实例讲解
2021/02/03 Python
夏洛特和乔治婴儿和儿童时装精品店:Charlotte and George
2018/06/06 全球购物
东方通信股份有限公司VC面试题
2014/08/27 面试题
新教师工作感言
2014/02/16 职场文书
股权转让协议书范本
2014/04/12 职场文书
大学专科自荐信
2014/06/17 职场文书
英文辞职信范文
2015/05/13 职场文书
Python自动化爬取天眼查数据的实现
2021/06/15 Python