• vue组件传值 递增次数传递bug修复


    需求是点击登录了以后让值传递过去,判断是手机号登录或者邮箱登录来进行绑定邮箱或者绑定手机

    但是在传递输入框的值的时候遇到,第一次传0次值,第二次传1次,第三次传2次.....的情况

    问了下前辈,前辈帮我看完以后说原因:页面消失的时候监听不消失,需要进行手动取消

    放上代码:

    <template>
      <div>
        <el-form class="login-form" :rules="loginmsg" ref="login" :model="login">
          <el-form-item prop="username">
            <span class="registImg">
              <img src="@/assets/img/login/yonghuming.png" />
            </span>
            <el-input
                ref="username"
              v-model="login.username"
              placeholder="请输入邮箱号/手机号"
              type="text"
              tabindex="1"
              name="username"
              autofocus
            />
          </el-form-item>
    
          <el-form-item prop="password">
            <span class="registImg">
              <img src="@/assets/img/login/mima.png" />
            </span>
            <el-input
              ref="password"
              :key="passwordType"
              v-model="login.password"
              :type="passwordType"
              placeholder="请输入密码"
              tabindex="2"
              maxlength="16"
              show-password
              autofocus
            />
          </el-form-item>
    
          <div class="login_div_btn">
            <span class="login_span" @click="gopassword">忘记密码?</span>
            <el-button
              :loading="loading"
              type="primary"
              @click.native.prevent="handleLogin('login')"
            >登录</el-button>
          </div>
        </el-form>
      </div>
    </template>
    
    <script>
    import config from '@/config'
    // import bus from '@/config/bus.js'
    import {validEmail,validPhone} from './validate'
    export default {
      data() {
           var checkUserName = (rule, value, callback) => {
              if (!value || !value.trim()) {
                  this.login.username = ""
                  callback(new Error('手机号/邮箱不能为空'));
              }
              if(!validEmail(value) && !validPhone(value)){        
                callback(new Error("请输入正确的格式"));
              }else{
                callback()
            }
            };
    
            var validatePassword = (rule, value, callback) => {
            if (value.length < 6) {
                callback(new Error('密码不能少于6位'))
            } else {
                callback()
            }
            };
    
        return {
          passwordType: "password",
          loading: false,
          login: {
            username: "18336638783",
            password: "123456"
          },
          loginmsg: {
            username: [{required: true,validator: checkUserName, trigger: "blur"}],
            password: [{required: true,validator: validatePassword, trigger: "blur" }]
          }
        };
      },
      destroyed(){
        this.$bus.$emit("usermsg",this.login.username)
      },
      methods: {
        gopassword() {
          setTimeout(() => {
            this.loading = false;
            this.$router.push("/forgetpassword");
          }, 500);
        },
        handleLogin(formName) {
            this.$refs[formName].validate((valid) => {
                this.loading = true;
                if (valid) {
                   this.$axios.post(config.KEY.URL_LOGIN+"/login",{
                      phoneOrEmail:this.login.username,
                      passWord:this.login.password
                  }).then(res =>{
                    console.log(res)
                    if(res.data.status == 200){
                        this.$message.success("登录成功");
                        bus.$emit("usermsg",this.login.username)
                        setTimeout(() =>{
                          this.loading = false;
                           this.$router.push("/bindingmodifica/phone");
                        },1000)
                    }
                    if(res.data.status == 500 || res.data.status == 404){
                      setTimeout(() =>{
                          this.loading = false;
                          this.login.password="";
                          this.$message.error(res.data.msg);
                         },500)
                    }
                    if(res.data.status == "000"){
                      setTimeout(() =>{
                        this.loading = false;
                        this.$message.error("请输入有效的用户信息");
                        this.login.password = this.login.username = "";
                      },500)
                    }
                  }).catch(err =>{
                      console.log(err)
                      this.loading = false;
                      this.$message({ message: "服务器错误" });
                      this.login.password = this.login.username = "";
                  })
                } else {
                  this.loading = false;
                  return false;
                }
            });
    
        }
      },
      
    };
    </script>
    
    <style>
    </style>
    <template>
      <div class="binding_modifica">
          <uploadheader></uploadheader>
          <div class="binding_main" id="bindingmodifica">
                <router-view />
          </div>
      </div>
    </template>
    
    <script>
    // import bus from '@/config/bus.js'
    import { validEmail, validPhone } from "@/components/login/validate";
    import uploadheader from "@/components/upload/upload_header"
    import '@/assets/css/binding/binding_modifica.css'
    export default {
      data(){
        return{
          bindingVal:"",
        }
      },
       components:{
           uploadheader,
       },
       methods:{
    
       },
       created(){
         this.$bus.$on("usermsg",value =>{
              console.log(value)
              this.bindingVal = value;
              // if(validEmail(this.bindingVal)){
              //   console.log("邮箱格式")
              // }else if(validPhone(this.bindingVal)){
              //   console.log("手机号格式")
              // }
            })
         
       },
       mounted(){
            // bus.$emit('aa',false)
           
       },
       destroyed(){
        this.$bus.$off('usermsg');
       }
    }
    </script>
    
    <style>
    
    </style>

    需要在销毁的时候在destroyed生命周期中用$off方法来销毁这个方法

    这样就可以做到一次传一个值了

    这样还有一个问题,无论用户是否登录成功,都会吧这个正确或者错误的值传递过去,会造成逻辑错误,要进行一些简单的判断

    <template>
      <div>
        <el-form class="login-form" :rules="loginmsg" ref="login" :model="login">
          <el-form-item prop="username">
            <span class="registImg">
              <img src="@/assets/img/login/yonghuming.png" />
            </span>
            <el-input
                ref="username"
              v-model="login.username"
              placeholder="请输入邮箱号/手机号"
              type="text"
              tabindex="1"
              name="username"
              autofocus
            />
          </el-form-item>
    
          <el-form-item prop="password">
            <span class="registImg">
              <img src="@/assets/img/login/mima.png" />
            </span>
            <el-input
              ref="password"
              :key="passwordType"
              v-model="login.password"
              :type="passwordType"
              placeholder="请输入密码"
              tabindex="2"
              maxlength="16"
              show-password
              autofocus
            />
          </el-form-item>
    
          <div class="login_div_btn">
            <span class="login_span" @click="gopassword">忘记密码?</span>
            <el-button
              :loading="loading"
              type="primary"
              @click.native.prevent="handleLogin('login')"
            >登录</el-button>
          </div>
        </el-form>
      </div>
    </template>
    
    <script>
    import config from '@/config'
    import bus from '@/config/bus.js'
    import {validEmail,validPhone} from './validate'
    export default {
      data() {
           var checkUserName = (rule, value, callback) => {
              if (!value || !value.trim()) {
                  this.login.username = ""
                  callback(new Error('手机号/邮箱不能为空'));
              }
              if(!validEmail(value) && !validPhone(value)){        
                callback(new Error("请输入正确的格式"));
              }else{
                callback()
            }
            };
    
            var validatePassword = (rule, value, callback) => {
            if (value.length < 6) {
                callback(new Error('密码不能少于6位'))
            } else {
                callback()
            }
            };
    
        return {
          passwordType: "password",
          loading: false,
          login: {
            username: "18336638783",
            password: "123456"
          },
          loginmsg: {
            username: [{required: true,validator: checkUserName, trigger: "blur"}],
            password: [{required: true,validator: validatePassword, trigger: "blur" }]
          },
          loginInputVal:'',
        };
      },
      destroyed(){
        if(this.loginInputVal != ''){
          bus.$emit("loginusermsg",this.loginInputVal)
        }else{
          return ''
        }
      },
      methods: {
        gopassword() {
          setTimeout(() => {
            this.loading = false;
            this.$router.push("/forgetpassword");
          }, 500);
        },
        handleLogin(formName) {
            this.$refs[formName].validate((valid) => {
                this.loading = true;
                if (valid) {
                   this.$axios.post(config.KEY.URL_LOGIN+"/login",{
                      phoneOrEmail:this.login.username,
                      passWord:this.login.password
                  }).then(res =>{
                    console.log(res)
                    if(res.data.status == 200){
                        this.$message.success("登录成功");
                        this.loginInputVal = this.login.username
                        setTimeout(() =>{
                          this.loading = false;
                           this.$router.push("/bindingmodifica/phone");
                        },1000)
                    }
                    if(res.data.status == 500 || res.data.status == 404){
                      setTimeout(() =>{
                          this.loading = false;
                          this.login.password="";
                          this.$message.error(res.data.msg);
                         },500)
                    }
                    if(res.data.status == "000"){
                      setTimeout(() =>{
                        this.loading = false;
                        this.$message.error("请输入有效的用户信息");
                        this.login.password = this.login.username = "";
                      },500)
                    }
                  }).catch(err =>{
                      console.log(err)
                      this.loading = false;
                      this.$message({ message: "服务器错误" });
                      this.login.password = this.login.username = "";
                  })
                } else {
                  this.loading = false;
                  return false;
                }
            });
    
        }
      },
      
    };
    </script>
    
    <style>
    </style>
  • 相关阅读:
    Google Analytics:为链接点击设定事件追踪的方法
    HTTP状态码大全
    jquery插件的编写
    2016.2.27日(开学)学习总结
    关于单文件上传的封装
    单文件的文件上传详细解释
    php中对象的串行化
    PDO的事物处理机制
    MySQL操作类的封装(PHP)
    smarty的简单介绍
  • 原文地址:https://www.cnblogs.com/huchong-bk/p/12160136.html
Copyright © 2020-2023  润新知