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的更多相关文章

  1. Vue+Iview+Node 搭建数据模拟接口

    1.初始化node 项目 2.安装需要部件 3.编写简单代码 routers=>:index.js  login.js  users.js 根目录 index.js var express=re ...

  2. Vue+Iview+Node 项目结构和配置

    1.项目调整后的目录 api:数据接口定义 assets:静态文件 components:组件  config:项目相关配置  driective:指令   router:路由   store:状态管 ...

  3. Vue+Iview+Node 安装环境 运行测试Vue

    1.运行环境及设置 备注:建议设置 npm config set registry https://registry.npm.taobao.org 2.全局安装vue/cli 3.创建vue 项目 v ...

  4. 【vue】MongoDB+Nodejs+express+Vue后台管理项目Demo

    ¶项目分析 一个完整的网站服务架构,包括:   1.web frame ---这里应用express框架   2.web server ---这里应用nodejs   3.Database ---这里 ...

  5. thinkphp5+vue+iview商城 公众号+小程序更新版本

    thinkphp5+vue+iview商城加分销 源码下载地址:http://github.crmeb.net/u/crmeb 演示站后台:http://demo25.crmeb.net 账号:dem ...

  6. .NET压缩图片保存 .NET CORE WebApi Post跨域提交 C# Debug和release判断用法 tofixed方法 四舍五入 (function($){})(jQuery); 使用VUE+iView+.Net Core上传图片

    .NET压缩图片保存   需求: 需要将用户后买的图片批量下载打包压缩,并且分不同的文件夹(因:购买了多个用户的图片情况) 文章中用到了一个第三方的类库,Nuget下载 SharpZipLib 目前用 ...

  7. Xamarin.Android再体验之简单的登录Demo

    一.前言 在空闲之余,学学新东西 二.服务端的代码编写与部署 这里采取的方式是MVC+EF返回Json数据,(本来是想用Nancy来实现的,想想电脑太卡就不开多个虚拟机了,用用IIS部署也好) 主要是 ...

  8. 易Android登录Demo

    上一页介绍Android项目简单的页面跳转实例,算是对开发环境的熟悉,这一篇将在此基础上增加一些简单的逻辑,实现登录的效果. 登录之前: 登录成功: watermark/2/text/aHR0cDov ...

  9. socket应用(vue、node.js、M站)

    socket应用(vue.node.js.M站) 前言:我们在做一些项目的时候需要做到实时变化, 比如我们有时候有需求会要求我们做一个类似于聊天室的页面 比如有些时候我们对某些东西进行点赞和刷票,需要 ...

随机推荐

  1. android项目各个文件详解

    res目录说明 android应用的res目录是一个特殊的目录,该项目里存放了 android应用所用的全部资源,包括图片资源.字符串资源. 颜色资源.尺寸资源等. /res/value/string ...

  2. css3 一个六边形 和 放大旋转动画DEMO演示

    <!DOCTYPE html> <html> <head> <meta charset="gb2312"> <title> ...

  3. Django 框架之前

    返回主目录:Django框架 内容目录: 一.Django框架之前的内容 1.1 web应用程序的架构 1.2 HTTP协议 1.3 纯手写简单web框架 一.Django框架之前d的内容 1.1 w ...

  4. 用C#简单实现的36进制转换代码

    private const string initValue = "A0000001"; private static string cs = "0123456789AB ...

  5. PKUSC订正

    Day1 T2:最大前缀和 枚举答案集合(不直接枚举答案数,相当于状态的离散化),这个集合成为答案当且仅当存在方案使得答案集合的排列后缀和>=0(如果<0就可以去掉显然更优),答案补集的前 ...

  6. ThinkPHP v5 新漏洞攻击案例首曝光,阿里云已可告警并拦截

    2018年12月10日,ThinkPHP v5系列发布安全更新,修复了一处可导致远程代码执行的严重漏洞.阿里云态势感知已捕获多起基于该漏洞的真实攻击,并对该漏洞原理以及漏洞利用方式进行分析.现在,对于 ...

  7. HTML5布局篇

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title> ...

  8. (转)Java安全通信:HTTPS与SSL

    转:http://www.cnblogs.com/devinzhang/archive/2012/02/28/2371631.html 1. HTTPS概念 1)简介 HTTPS(全称:Hyperte ...

  9. hdu多校第七场 1011 (hdu6656) Kejin Player 概率dp

    题意: 一个游戏,有许多关,到下一关要花费金钱,做出尝试,有概率成功,若成功则到达下一关,若失败则停在此关或退回到前面某关,询问第l关到第r关的期望费用 题解: 显然,第r关到第l关的费用是dp[r] ...

  10. 本地 win7 与虚拟机Centos7 ping互通和Centos7 上网设置

    VM 12 安装虚拟机我就不表示了 很简单网上找找 一 .虚拟机设置 1.修改使用了 VMWare 12 虚拟机,Oracle VM 用得有点晕 2.配置VM 的NET环境 3.在VMware虚拟机任 ...