需要解决的问题:
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. 怎样打开win7的IIS功能及internet信息服务(IIS)管理器在哪里

    1:在windows7桌面上的左下角,点击"开始",找到"控制面板",并点击进去.如下图所示: 2:进入控制面板后,首先将"查看方式"选择为 ...

  2. (第二章第三部分)TensorFlow框架之读取二进制数据

    系列博客链接: (第二章第一部分)TensorFlow框架之文件读取流程:https://www.cnblogs.com/kongweisi/p/11050302.html (第二章第二部分)Tens ...

  3. SQL Server--设置用IP地址登录

    问题概述:新安装的SQL Server数据库无法用IP地址登录. 是因为 SQL Server  "服务器网络实用工具"中禁用了"命名管道"所致! 在sqlse ...

  4. netty搭建rpc框架

    介绍 netty想必大家都不陌生,我就不废话介绍了...(主要是懒,网上资料很多的) 本文主要使用netty搭建rpc远程调用框架,实现了个注册中心微服务,整合了springboot例子... 开发内 ...

  5. mysql中MyISAM与InooDB存储引擎的区别

    MyISAM存储引擎特点 不支持事务 表级锁定 读写相互阻塞,写入不能读,读时不能写 只缓存索引 不支持外键约束 不支持聚簇索引 读取数据较快,占用资源较少 不支持MVCC(多版本并发控制机制)高并发 ...

  6. 【行业Tip】两化融合

    工业4.0 智能制造规划 两化融合是信息化和工业化的高层次的深度结合, 是指以信息化带动工业化.以工业化促进信息化,走新型工业化道路:两化融合的核心就是信息化支撑,追求可持续发展模式.

  7. 微信小程序获取当前的时间戳

    js文件中进行计算var timestamp = Date.parse(new Date()); timestamp = timestamp / 1000; console.log(timestamp ...

  8. CF772D题解

    什么阴间十进制状压 题意:给定 $ n $ 数字,求定义函数 $ G(x) $ 能够表示 满足"十进制按位与为 $ x $"的集合的平方和之和乘上 \(x\),求 \(\bigop ...

  9. oneAPI DPC++学习资料和实验平台

    DPC++ 一种新的异构平台,弥补了OPENCL 编写复杂的难题.基于SYCL 抽象层.基于SYCL 有多种实现,其中DPC++是相对成熟的方案. 书籍 由Intel工程师撰写的免费电子图书 Data ...

  10. AE功能扩展一

    1.添加栅格影像 基本思路:声明栅格工作空间→创建栅格数据集对象→创建金字塔→声明图层对象→刷新地图控件 private void AddBaseMap(string filepath) { IWor ...