需要解决的问题:
store存储登录状态
Vue-Router导航钩子拦截路由
Vue-Resource获取后台的数据
需要判断登录返回的user
源码参考
原文地址

主要技术栈:Vuex + Vue-Resource + Vue-Router
后台用mock-data来模拟数据。


先来看一下效果图

第一步、起个项目打开控制台输入

$ npm install --global vue-cli#创建一个自己的基于webpack的新项目
$ vue init webpack my-project(这里是你自己的工程名)
$ cd my-project(进到你的工程文件夹下)
$ npm install (安装依赖)
$ npm run dev

注意:起工程的时候回让你选择ESLint,Test等等各种测试,这里都默认选no就可以。


现在你的项目应该跑起来了。打开控制台输入npm run dev
应该是这样的。


好了起项目成功了,接下来撸起袖子加油干吧。
先来看一下项目结构:


第二步、配置一下mock-data。

{
"users": [
{
"id" : 1,
"username": "aaa",
"password": "aaa"
},
{
"id" : 2,
"username": "bbb",
"password": "bbb"
},
{
"id": 3,
"username": "ccc",
"password": "ccc"
}
]
}

这里给指定了三个用户名和密码,在login登陆的时候只有输入正确的用户名和密码才可以登陆实现页面的跳转。
第三步 配置view视图层Login.vue文件中

<script>
export default {
data() {
return {
name:'',
pwd:'',
error:''
}
},
computed: {
user() {
return this.$store.state.user
}
},
methods:{
isLogin:function() {
this.$http.get('http://localhost:3000/users?username='+this.name+'&password='+this.pwd).then((response) => {
//这里在isLogin方法中先判断一下后台返回的是否为空值,如果不是然后提交后台返回的值。
//注意这里是个难点,Vuex与Vue-Resource结合使用。
if(response.body != null & response.body.length > 0){
this.$store.commit('isLogin',response.body[0]);
this.name=''
this.pwd= ''
this.$router.push({ path: 'main' })
}else{
alert('请输入正确的用户名和密码!!!');
this.name=''
this.pwd= ''
} }).then((error)=> this.error = error)
}
}
}
</script>

接下来是Main.vue ,这个页面很简单,简单的写一些内容作为测试是否登录跳转成功。

<template>
<div>
<h1>Hello Main!</h1>
<section v-show="user">
<!-- 这里的user是从下面JavaScript的computed的user()方法中得到的。 -->
<p>欢迎{{user.username}}</p>
</section>
</div>
</template>
<script>
export default {
computed: {
user(){
//因为在main.js中已经全局注册了store,所以这里直接用this.$直接使用。
return this.$store.state.user
}
}
}
</script>

下面来配置一下路由。routes.js

//先引入需要路由的文件
import Main from '../components/Main'
import Login from '../components/Login' export default [
{
path: '/login',
component: Login
},
{
path: '/main',
meta: {
// 添加该字段,表示进入这个路由是需要登录的
requireAuth: true,
},
component: Main, }
]

接下来是main.js(这里只对重点拿出来细说)

// 全局导航钩子
router.beforeEach((to, from, next) => {
// 判断该路由是否需要登录权限
if (to.meta.requireAuth) {
// 通过vuex state获取当前的token是否存在
// console.log(isEmptyObject(store.state.user))
if(!isEmptyObject(store.state.user)) {
next();
}
else {
next({
path: '/login',
query: {redirect: to.fullPath} // 将跳转的路由path作为参数,登录成功后跳转到该路由
})
}
}
else {
next();
}
}) function isEmptyObject(obj) {
for (var key in obj) {
return false;
}
return true;
}

重点参考链接
路由拦截导航。路由拦截
JavaScipt中判断对象是否为空。点击这里


存在的问题及待解决的问题: 登陆数据存在store中,每次刷新页面都会没有了。接下来要用LocalStorage或者Cookie来保存数据。

源码参考
原文地址


欢迎大神纠察指正,也希望前端爱好者提出宝贵意见,一起学习,一块交流讨论。喜欢的话请点个赞吧。(感谢阅读)

Vue2.0一个login跳转实例的更多相关文章

  1. vue2.0一个书城实例

    gitHub克隆地址 git clone https://github.com/Webxiaoyaun/vue-book.git 点击去Github下载 ## 一个书城 ## 有增加,修改,缓存,懒加 ...

  2. vue2.0 页面A跳转到页面B,B页面停留在A页面的滚动位置的解决方法

    如果页面A沿Y轴滚动一段距离,然后跳转到页面B: 在进入B页面时,B页面已经滚到页面A的距离,返回页面A,发现A还在之前的滚动位置: 这样体验就很不好,所以我们要进行一些处理: 我的方法是:在路由守卫 ...

  3. vue2.0路由(跳转和传参)经典介绍

    声明式 <router-link :to="...">编程式router.push(...) router.push('home')                 / ...

  4. vue2.0一个弹窗组件

  5. 【重点突破】—— Vue1.0到Vue2.0的变化

    前言: 本文参考作者:_So_ 和 我是某慧 的博文,重点梳理Vue1.0升级到Vue2.0后在开发中要注意的不同,以做学习.        组件模板不再支持片段代码,必须有一个顶级元素包裹,例如: ...

  6. vue2.0 vs vue

    vue2.0相比vue1.0 有哪些改变,今天总结了一下 vue2.0组件中 template 不在支持代码片段 //vue1.0组件中template写法 <template> < ...

  7. vue2.0+element+node+webpack搭建的一个简单的后台管理界面

    闲聊: 今天是六一儿童节哟,小颖祝大家节日快乐哈哈哈.其实这个demo小颖断断续续做了将近两个礼拜了,心塞的,其实这个也没有多难,主要是小颖有点最近事情有点多,所以就把这个一直拖着,今天好不容易做好了 ...

  8. 基于Vue2.0+Vue-router构建一个简单的单页应用

    爱编程爱分享,原创文章,转载请注明出处,谢谢!http://www.cnblogs.com/fozero/p/6185492.html 一.介绍 vue.js 是 目前 最火的前端框架,vue.js ...

  9. 用webpack2.0构建vue2.0单文件组件超级详细精简实例

    npm init -y 初始化项目  //-y 为自动生成package.json,如果需要自行配置,去掉-y即可 安装各种依赖项 npm install --save vue 安装vue2.0 np ...

随机推荐

  1. Python 中的深浅拷贝

    Python 中的深浅拷贝 参考文献:https://blog.csdn.net/lnotime/article/details/81194633 参考文献:https://blog.csdn.net ...

  2. Python字典的创建与复制

    Python 字典练习题 1.字典的创建 1.1 普通创建 d={'name':'Allen','age':21,'gender':'male'} print(d) # {'name': 'Allen ...

  3. tensorflow源码解析之common_runtime-session

    目录 核心概念 session session_factory 1. 核心概念 session可以认为是一个执行代理.我们在客户端构建计算图,提供输入,然后把计算图丢给session去执行.因此,se ...

  4. ROS路由器DHCP地址不够使用解决办法!

    由于这段时间公司使用ROS6.2+AC控制器+AP的方案做了公WIFI覆盖,但最近发现地址被用完. 如果使用默认的地址192.168.1.1-192.168.8.254,最多只有254个地址可用,但内 ...

  5. CentOS7.5安装配置Jenkins

    一. 硬件配置: 1 GB的RAM 50 GB的驱动器空间 二. 系统环境: [root@Jenkins ~]# cat /etc/redhat-release CentOS Linux releas ...

  6. 使用数据库、Redis、ZK分别实现分布式锁!

    分布式锁三种实现方式: 基于数据库实现分布式锁: 基于缓存(Redis等)实现分布式锁: 基于Zookeeper实现分布式锁: 基于数据库实现分布式锁 悲观锁 利用select - where - f ...

  7. 使用SymPy

    最近工作的原因,需要进行一些积分运算,通过一些搜索得知了SymPy,记录一下使用历程. 1. SymPy介绍 SymPy是关于Symbolic Mathematics的Python库,它旨在成为一个功 ...

  8. 洛谷P1049 [NOIP2001 普及组] 装箱问题

    本题就是一个简单的01背包问题   1.因为每个物品只能选一次,而且要使箱子的剩余空间为最小.所以可以确定属性为 MAX 2.由于是从n个物品里面选i个物品 那么就是选出的i个物品的空间总和要尽可能的 ...

  9. 论文翻译:2021_Joint Online Multichannel Acoustic Echo Cancellation, Speech Dereverberation and Source Separation

    论文地址:https://arxiv.53yu.com/abs/2104.04325 联合在线多通道声学回声消除.语音去混响和声源分离 摘要: 本文提出了一种联合声源分离算法,可同时减少声学回声.混响 ...

  10. 搭建nuget服务器(二):制作nuget包

    生成nuget包可以使用nuget.exe或者下载nuget package explorer工具 nuget package explorer 下载地址:https://github.com/NuG ...