Vue+Iview+Node 登录demo
1.相关组件安装 axios iview js-cookie crypto-js




2.子父组件传值、监听窗体大小改变、记住密码 、自定义组件(事件 、props)
created:实例已经创建完成之后被调用。在这一步,实例已完成以下的配置:数据观测(data observer),属性和方法的运算, watch/event 事件回调。然而,挂载阶段还没开始,$el 属性目前不可见。
mounted:el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用该钩子。如果 root 实例挂载了一个文档内元素,当 mounted 被调用时 vm.$el 也在文档内。
destroyed:Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。
computed:计算属性,只在初始化时被调用。
methods: 里面是用来定义函数的,很显然,它需要手动调用才能执行。而不像watch和computed。
watch:类似于监听机制+事件机制
父组件:
<style lang="less">
@import "./login.less";
</style> <template>
<div class="login">
<div class="header Cblue">
<div class="wrapper clearfix">
<h1>VUE+IVIEW V1.0</h1>
<span class="QRspan">
<Icon type="logo-googleplus" size="24" />
<span>关注公众号</span>
<img class="QRimg" src="../../assets/images/qr.png" />
</span>
</div>
</div>
<div class="content" :style="{height: screenHeight}">
<div class="wrapper">
<img class="bg1" src="../../assets/images/bg1.png" />
<div class="loginBox">
<div class="logo">
<img src="../../assets/images/logo.png" />
</div>
<div class="formDiv">
<login-form @on-success-valid="handleSubmit" :username="localusername" :userpwd="localuserpwd"></login-form>
</div>
</div>
</div>
</div>
<div class="footer">
<div class="wrapper">
<span>Copyright © 2019-2020 Lin.Su</span>
</div>
</div>
</div>
</template> <script>
import LoginForm from '_c/login-form'
import { mapActions } from 'vuex'
export default {
components: {
LoginForm
},
data () {
return {
screenHeight: ''
}
},
methods: {
...mapActions(['handleLogin', 'svaeUserInfo']),
handleSubmit ({ userName, password, remember }) {
this.handleLogin({ userName, password }).then(res => {
const user = res.userinfo
user.pwd = password
if (res.code === 200) {
this.svaeUserInfo({ user, remember })
this.$router.push({
name: this.$config.homeName
})
} else {
this.$Message.error({
content: res.msg,
duration: 10
})
}
}).catch(err => {
if (err.message === 'NetWorkeError') {
this.$Message.error({
content: '接口服务异常',
duration: 10
})
}
})
},
getHeight () {
let windowHeight = document.documentElement.clientHeight
this.screenHeight = windowHeight - 102 - 138 + 'px'
}
},
created () {
window.addEventListener('resize', this.getHeight)
this.getHeight()
},
mounted () {
const that = this
window.onresize = () => {
that.getHeight()
}
},
computed: {
localusername () {
var userinfo = JSON.parse(this.$store.state.user.userinfo)
if (userinfo) {
return userinfo.username
}
return ''
},
localuserpwd () {
var userinfo = JSON.parse(this.$store.state.user.userinfo)
if (userinfo) {
return userinfo.pwd
}
return ''
}
},
watch: {
screenHeight (val) {
this.screenHeight = val
}
}
}
</script> <style>
</style>
子组件
<template>
<Form ref="loginForm" :model="form" :rules="rules" @keydown.enter.native="handleSubmit">
<FormItem prop="userName">
<Input v-model="form.userName" placeholder="请输入用户名">
<span slot="prepend">
<Icon :size="16" type="ios-person"></Icon>
</span>
</Input>
</FormItem>
<FormItem prop="password">
<Input type="password" v-model="form.password" placeholder="请输入密码">
<span slot="prepend">
<Icon :size="14" type="md-lock"></Icon>
</span>
</Input>
</FormItem>
<FormItem label="记住密码">
<i-switch v-model="form.remember" size="large">
<span slot="open">开</span>
<span slot="close">关</span>
</i-switch>
</FormItem>
<FormItem>
<Button @click="handleSubmit" type="primary" long>登录</Button>
</FormItem>
</Form>
</template>
<script>
export default {
name: 'LoginForm',
props: {
userNameRules: {
type: Array,
default: () => {
return [{ required: true, message: '账号不能为空', trigger: 'blur' }]
}
},
passwordRules: {
type: Array,
default: () => {
return [{ required: true, message: '密码不能为空', trigger: 'blur' }]
}
},
userpwd: {
type: String,
default: ''
},
username: {
type: String,
default: ''
}
},
data () {
return {
form: {
userName: this.username,
password: this.userpwd,
remember: false
}
}
},
computed: {
rules () {
return {
userName: this.userNameRules,
password: this.passwordRules
}
}
},
methods: {
handleSubmit () {
this.$refs.loginForm.validate(valid => {
if (valid) {
this.$emit('on-success-valid', {
userName: this.form.userName,
password: this.form.password,
remember: this.form.remember
})
}
})
}
}
}
</script>



3.效果展示


Vue+Iview+Node 登录demo的更多相关文章
- Vue+Iview+Node 搭建数据模拟接口
1.初始化node 项目 2.安装需要部件 3.编写简单代码 routers=>:index.js login.js users.js 根目录 index.js var express=re ...
- Vue+Iview+Node 项目结构和配置
1.项目调整后的目录 api:数据接口定义 assets:静态文件 components:组件 config:项目相关配置 driective:指令 router:路由 store:状态管 ...
- Vue+Iview+Node 安装环境 运行测试Vue
1.运行环境及设置 备注:建议设置 npm config set registry https://registry.npm.taobao.org 2.全局安装vue/cli 3.创建vue 项目 v ...
- 【vue】MongoDB+Nodejs+express+Vue后台管理项目Demo
¶项目分析 一个完整的网站服务架构,包括: 1.web frame ---这里应用express框架 2.web server ---这里应用nodejs 3.Database ---这里 ...
- thinkphp5+vue+iview商城 公众号+小程序更新版本
thinkphp5+vue+iview商城加分销 源码下载地址:http://github.crmeb.net/u/crmeb 演示站后台:http://demo25.crmeb.net 账号:dem ...
- .NET压缩图片保存 .NET CORE WebApi Post跨域提交 C# Debug和release判断用法 tofixed方法 四舍五入 (function($){})(jQuery); 使用VUE+iView+.Net Core上传图片
.NET压缩图片保存 需求: 需要将用户后买的图片批量下载打包压缩,并且分不同的文件夹(因:购买了多个用户的图片情况) 文章中用到了一个第三方的类库,Nuget下载 SharpZipLib 目前用 ...
- Xamarin.Android再体验之简单的登录Demo
一.前言 在空闲之余,学学新东西 二.服务端的代码编写与部署 这里采取的方式是MVC+EF返回Json数据,(本来是想用Nancy来实现的,想想电脑太卡就不开多个虚拟机了,用用IIS部署也好) 主要是 ...
- 易Android登录Demo
上一页介绍Android项目简单的页面跳转实例,算是对开发环境的熟悉,这一篇将在此基础上增加一些简单的逻辑,实现登录的效果. 登录之前: 登录成功: watermark/2/text/aHR0cDov ...
- socket应用(vue、node.js、M站)
socket应用(vue.node.js.M站) 前言:我们在做一些项目的时候需要做到实时变化, 比如我们有时候有需求会要求我们做一个类似于聊天室的页面 比如有些时候我们对某些东西进行点赞和刷票,需要 ...
随机推荐
- android项目各个文件详解
res目录说明 android应用的res目录是一个特殊的目录,该项目里存放了 android应用所用的全部资源,包括图片资源.字符串资源. 颜色资源.尺寸资源等. /res/value/string ...
- css3 一个六边形 和 放大旋转动画DEMO演示
<!DOCTYPE html> <html> <head> <meta charset="gb2312"> <title> ...
- Django 框架之前
返回主目录:Django框架 内容目录: 一.Django框架之前的内容 1.1 web应用程序的架构 1.2 HTTP协议 1.3 纯手写简单web框架 一.Django框架之前d的内容 1.1 w ...
- 用C#简单实现的36进制转换代码
private const string initValue = "A0000001"; private static string cs = "0123456789AB ...
- PKUSC订正
Day1 T2:最大前缀和 枚举答案集合(不直接枚举答案数,相当于状态的离散化),这个集合成为答案当且仅当存在方案使得答案集合的排列后缀和>=0(如果<0就可以去掉显然更优),答案补集的前 ...
- ThinkPHP v5 新漏洞攻击案例首曝光,阿里云已可告警并拦截
2018年12月10日,ThinkPHP v5系列发布安全更新,修复了一处可导致远程代码执行的严重漏洞.阿里云态势感知已捕获多起基于该漏洞的真实攻击,并对该漏洞原理以及漏洞利用方式进行分析.现在,对于 ...
- HTML5布局篇
<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title> ...
- (转)Java安全通信:HTTPS与SSL
转:http://www.cnblogs.com/devinzhang/archive/2012/02/28/2371631.html 1. HTTPS概念 1)简介 HTTPS(全称:Hyperte ...
- hdu多校第七场 1011 (hdu6656) Kejin Player 概率dp
题意: 一个游戏,有许多关,到下一关要花费金钱,做出尝试,有概率成功,若成功则到达下一关,若失败则停在此关或退回到前面某关,询问第l关到第r关的期望费用 题解: 显然,第r关到第l关的费用是dp[r] ...
- 本地 win7 与虚拟机Centos7 ping互通和Centos7 上网设置
VM 12 安装虚拟机我就不表示了 很简单网上找找 一 .虚拟机设置 1.修改使用了 VMWare 12 虚拟机,Oracle VM 用得有点晕 2.配置VM 的NET环境 3.在VMware虚拟机任 ...