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>
    日常所遇,随手而记。
  • 相关阅读:
    BZOJ2821 作诗(Poetize) 【分块】
    BZOJ2724 蒲公英 【分块】
    Codeforces 17E Palisection 【Manacher】
    BZOJ2565 最长双回文串 【Manacher】
    Codeforces 25E Test 【Hash】
    CODEVS3013 单词背诵 【Hash】【MAP】
    HDU2825 Wireless Password 【AC自动机】【状压DP】
    HDU2896 病毒侵袭 【AC自动机】
    HDU3065 病毒侵袭持续中【AC自动机】
    HDU2222 Keywords Search 【AC自动机】
  • 原文地址:https://www.cnblogs.com/zhihou/p/8330200.html
Copyright © 2011-2022 走看看