Vue开发中登录与注册切换

登录和注册的隐藏与显示

在开发中经常会用到,在注册与登录上也会比较伤脑筋,所以这里我用一个案例来说明:

1.点击主页面后弹出的一个登录弹框,默认显示是登录界面

登录按钮

登录页面
HTML代码

<!--
type:   input的类型 text为“文本框” password为“密码框” submit为“按钮框”
name:  名称
id:     只有唯一的id值
placeholder:  输入框中默认的文字
v-model:  双向数据绑定
@blur:     绑定变量名
 -->
 <div class="login">
 <div v-show="showLogin">
        <div>
          <input type="text" name="phone" id="phone" placeholder="请输入手机号"  v-model="phone" @blur="phoneVerify()"/>
   <!-- 将{
    
    {}}绑定提示信息或者警告信息  当输入错误或者未输入进行信息提示 -->
          <p>{
   
   {phoneMessage}}</p> 
        </div>
        <div >
          <input type="password" name="password" id="password" placeholder="请输入密码" v-model="password" @blur="Passwordvalidation()"/>
          <p>{
   
   {pwdMessage}}</p>
        </div>
        <div>
          <input type="submit" value="登陆" class="log" @click="login()"/>
        </div>
        <div>
          <input  type="submit" value="注册" class="register"  v-on:click="ToRegister" />
        </div>   
      </div>
     </div>

JavaScript代码

<script>
export default {
    
    
name:'Login',
data(){
    
    
return{
    
    
     phone:'',
     //登录手机号绑定的值
     phoneMessage:'',
     password:'',
     //登录密码绑定的值
     pwdMessage:'', 
   }
 },
	 methods:{
    
    
      /**隐藏登陆页面 */
      hiddenLogin(){
    
    
          this.$store.commit('hiddenLogin');
      },
      /**手机号码验证 */
      phoneVerify(){
    
    
          if(this.phone==''){
    
    
              this.phoneMessage='请输入手机号';
              return ;
          }
          else{
    
    
              /**res.data.exist=1说明有此账号 */
              _phoneVerify(this.phone).then(res=>{
    
    
                  if(res.data.exist!=1){
    
    
                      this.phoneMessage='手机号错误'
                  }else{
    
    
                      this.phoneMessage=''
                  }
              })
          }
      },
      // 密码验证
  Passwordvalidation(){
    
    
    if(this.password==''){
    
    
      this.pwdMessage='请输入密码';
      return;
    }
  },
 /**登陆 */
      login(){
    
    
          _login(this.phone,this.password).then(res=>{
    
    
              if(res.data.code!=200){
    
    
                  this.pwdMessage='密码错误';
              }
              else{
    
    
                  this.$store.commit('addUser',res.data);
                  this.hiddenLogin();
                  this.$bus.$emit('pullResource',res.data.cookie);
              }
          })
      },
}
</script>

CSS代码(仅供参考可自行设计)

.login {
    
    
  width: 400px;
  height: 560px;
  position:relative;
  z-index:999;
  top:0px;
  background: #fafafa;
}
.from-item {
    
    
  color: red;
  width: 60%;
  margin: 0px auto;
  padding: 10px 0px 10px 10px;
}
.from-item input{
    
    
  margin: 10px;
}
input {
    
    
  width: 200px;
  height: 2em;
  outline:none;
}
input.log:hover {
    
    
    background: #c72e2e;
}
p {
    
    
  font-size: 13px;
}
.log {
    
    
  outline-style: none;
  background: red;
  color: #fff;
  border: 0;
  height: 40px;
  border-radius: 10px;
  cursor: pointer;
}
.register {
    
    
  border: none;
  background: none;
  cursor: pointer;
}

这样登录页面就完成了看下效果图吧
在这里插入图片描述

2.现在我们要点击注册后跳转至注册页面
2.1在同级DIV下创建另外一个注册的盒子包裹里面的内容

HTML代码

<div class="login">

<!-- 登录模块 -->
 <div v-show="showLogin">
        <div>
          <input type="text" name="phone" id="phone" placeholder="请输入手机号"  v-model="phone" @blur="phoneVerify()"/>
   <!-- 将{
    
    {}}绑定提示信息或者警告信息  当输入错误或者未输入进行信息提示 -->
          <p>{
   
   {phoneMessage}}</p> 
        </div>
        <div >
          <input type="password" name="password" id="password" placeholder="请输入密码" v-model="password" @blur="Passwordvalidation()"/>
          <p>{
   
   {pwdMessage}}</p>
        </div>
        <div>
          <input type="submit" value="登陆" class="log" @click="login()"/>
        </div>
        <div>
          <input  type="submit" value="注册" class="register"  v-on:click="ToRegister" />
        </div>   
      </div>
      
      <!-- 注册模块 -->
         <div v-show="showRegister">
    
          <div>
          <input type="text" name="nickname" id="nickname" placeholder="请输入昵称" required v-model="nickname"/>
        </div>
        <div >
          <input type="text" name="phone" id="phone" placeholder="请输入手机号" required v-model="phone" @blur="RegisterphoneVerify()"/>
          <p>{
   
   {registerphoneMessage}}</p>
        </div>
        <div>
          <input type="password" name="password" id="password" placeholder="请输入密码" v-model="password" />
          <p>{
   
   {registerpwdMessage}}</p>
        </div>
        <div>
          <input type="submit" value="确定" class="log" @click="login()"/>
        </div>
        <div>
        <span v-on:click="ToLogin">跳回登录页面</span>
        </div>
      </div>

     </div>

JavaScript代码

<script>
export default {
    
    
name:'Login',
data(){
    
    
return{
    
    
     phone:'',
     //登录手机号绑定的值
     phoneMessage:'',
     password:'',
     //登录密码绑定的值
     pwdMessage:'', 
     // 登录页面默认显示为true
          showLogin:true,
          // 注册页面默认隐藏为false
         showRegister:false,
          registerphoneMessage:'',
          nickname:'',
          phone:'',
          password:''
   }
   methods:{
    
    
   //可将登录与注册的都写在一起我这里为了方面演示,将其分开了
   		  // 跳转至注册页面,点击后showRegister就为显示页面了
   		  //showLogin就为隐藏页面了
      ToRegister(){
    
    
      this.showRegister=true,
      this.showLogin=false
    },
    // 跳转至登录页面,点击后注册页面就为隐藏页面
    //登录页面就为显示页面了
    ToLogin(){
    
    
      this.showRegister=false,
      this.showLogin=true
    },
     /**手机号码验证 */
      RegisterphoneVerify(){
    
    
          let regExp=/^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$/;
          this.registerphoneMessage='';
        if(!regExp.test(this.phone)){
    
     
          this.registerphoneMessage='手机格式不对'
    } 
      } 
   }
 },

来看下效果图吧
在这里插入图片描述
注册页面跳回登录仅为演示作用,可以自己进行改良,还可以添加获取验证码等功能
在这里插入图片描述
以上就是本篇文章的所有内容了,也可以进行改良 比如将注册页面可以封装成组件然后在Login页面进行组件调用等。欢迎大家来一起交流

猜你喜欢

转载自blog.csdn.net/weixin_45054614/article/details/112347974