zoukankan      html  css  js  c++  java
  • vue-form表单验证插件

    参考地址:https://segmentfault.com/q/1010000003988864

    github地址:https://github.com/fergaldoyle/vue-form

    安装插件

    cnpm install vue-form --save

    使用,在main.js里加入

    import VueForm from 'vue-form'

    Vue.use(VueForm)

    代码实战

      1 <template>
      2     <div class="login__content">
      3         <vue-form :state="formstate" v-model="formstate">
      4     <div class="login__title">SIGN IN</div>
      5     <div class="login__content_input username__margin_bottom">
      6            <validate auto-label class="form-group required-field" :class="fieldClassName(formstate.name)">
      7             <input type="text"  name='name'  placeholder="Username" required v-model="model.name"/>            
      8         </validate>
      9              <field-messages name="name" v-show="isSubmit">
     10            <!--<div class="success__msg"></div>-->
     11            <div class="error__msg" slot="required">Username is a required field</div>
     12              </field-messages>
     13     </div>
     14     <div class="login__content_input">
     15         <validate auto-label class="required-field" :class="fieldClassName(formstate.password)">
     16             <input type="password" name="password"  placeholder="Password" required v-model="model.password" />
     17         </validate>
     18         <field-messages name="password" v-show="isSubmit" >
     19              <!--<div class="success__msg"></div>-->
     20              <div class="error__msg" slot="required">Password is a required field</div>
     21         </field-messages>
     22         
     23     </div>
     24     <div class="error__msg" v-if='errorMsg["fail"]'>{{errorMsg["fail"]}}</div>
     25     <div class="login__in_part">
     26         <div class="forgot__password">
     27             <a >Forgot Password</a>
     28         </div>
     29         <div class="login__remember">
     30             <label><input type="checkbox" v-model="isRemember" /> Remember me</label>
     31         </div>
     32         <div class="login__in">
     33             <button  class="signin" @click.prevent="login"  >SIGN IN</button>
     34         </div>
     35     </div>
     36     <div class="sign__register">Don't have an account?  <a href="#" >Sign Up</a> </div>
     37     </vue-form>
     38 </div>
     39 </template>
     40 <script>
     41 import config from '../../utils/config.js'
     42 export default{
     43     data(){
     44         return{
     45             formstate: {},
     46             errorMsg:{},
     47             isSubmit:false,
     48             isRemember:true,
     49             model:{
     50                 name:'',
     51                 password:''
     52             }
     53         }
     54     },
     55     methods:{
     56         fieldClassName: function (field) {
     57       if(!field) {
     58         return '';
     59       }
     60       if((field.$touched || field.$submitted) && field.$valid && !this.errorMsg["fail"]) {
     61         return 'has-success';
     62       }
     63       if((field.$touched || field.$submitted) && field.$invalid && this.errorMsg["fail"]) {
     64         return 'has-danger';
     65       }
     66     },
     67     login(){
     68         this.isSubmit=true;
     69         if(this.formstate.$valid===false){
     70             return
     71         }
     72         let o={
     73             email:this.model.name,
     74             password:this.model.password
     75         }
     76         this.$axios.post(`${config.apiPreUrl}/login/getToken`, o).then((res)=>{
     77             console.log(res.data);
     78         })
     79     }
     80     }
     81 }
     82 </script>
     83 <style lang="scss" >
     84 .login__content{
     85    452px;
     86   height: 495px;
     87   background: white;
     88   position: relative;
     89   box-shadow: 0px 0px 14px #423D40;
     90   padding: 0 44px 0 43px;
     91 }
     92 .login__title{
     93   padding: 56px 0 27px 0px;
     94   font-size: 18px;
     95   color: #3A3A3A;
     96   font-weight: bolder;
     97 }
     98 .login__content_input{
     99    365px;
    100   position: relative;
    101   input{
    102     height: 48px;
    103     padding: 0 8px;
    104     background-color: #ffffff;
    105     padding-left: 15px;
    106      100%;
    107     outline: none;
    108     font-size: 15px;
    109     border: solid 1px #C4C4C4;
    110     &:hover{
    111         border: solid #C4C4C4 1px;
    112         box-shadow:0 0 3px rgba(136,136,136,0.7);
    113     }
    114   }
    115 }
    116 .username__margin_bottom{
    117   margin-bottom: 25px;
    118 }
    119 .forgot__password{
    120   font-size: 11px;
    121   padding: 9px 0 0 4px ;
    122   a{
    123     color:#E25043;
    124     cursor: pointer;
    125   }
    126 }
    127 .login__remember{
    128    padding: 29px 0;
    129    font-size: 11px;
    130    color: #707D95;
    131    font-weight: lighter;
    132    input{
    133         margin-top:0px !important;
    134         margin-right: 5px;
    135         vertical-align: middle;
    136    }
    137 }
    138 .login__in_part{
    139   padding-left: 4px;
    140 }
    141 .login__in{
    142   height: 44px;
    143   button{
    144      50%;
    145     height: 44px;
    146     color: #000;
    147     border: 0;
    148     background: #E25043;
    149     color: #ffffff;
    150     font-size: 12px;
    151   }
    152 }
    153 .sign__register{
    154   padding: 29px 0 0 6px;
    155   color: #4A4A4A;
    156   font-size: 12px;
    157   a{
    158     color: #E25043;
    159     text-decoration: none;
    160   }
    161 }
    162 .error__msg{
    163   color: #E25043;
    164   font-size: 13px;
    165   padding: 7px 0 0 0 ;
    166 }
    167 .has-danger{
    168   border: solid 1px #EB7057!important;
    169 }
    170 .has-success{
    171   border: solid 1px #43C7A9 !important;
    172 }
    173 .has-normal{
    174   border:solid #C4C4C4 1px!important;
    175 }
    176 </style>
    日常所遇,随手而记。
  • 相关阅读:
    Get IPv4 Address 2.0
    Apache Tomcat Manager 2.0
    Apache Tomcat Manager 1.0
    FTP自动登录脚本文件
    VMware Workstation 10 + CentOS-5.5-i386 + MySQL Server 5.5
    Copy Files Blurry 1.0
    Extract Chorus From Audio 1.0
    Refresh Baidu Zhidao Evaluate Num 2.0
    File Split 1.0
    其它有趣的事情分享
  • 原文地址:https://www.cnblogs.com/zhihou/p/8330200.html
Copyright © 2011-2022 走看看