vue重置表单,resetFields无法重置数据

梦里梦外; 2023-09-26 09:04 141阅读 0赞

状况描述:今天做一个登录页面,需要模拟提前缓存用户之前的信息,然后如果用户需要更换用户信息,那么用户就要点击重置按钮,但是重置了以后数据无法清空!在网上找了相关案例,用于解决这个问题,在这里记录一下方案!!!

开发技术:vue
开发工具:WebStorm

(1)页面显示

在这里插入图片描述

(2)代码描述:

  1. <template>
  2. <div class="login_container">
  3. <div class="login_box">
  4. <!-- 头像区域 -->
  5. <div class="avatar_box">
  6. <img src="../assets/logo.png" alt="" />
  7. </div>
  8. <!-- 登录表单区域 -->
  9. <el-form ref="loginFormRef" :model="loginForm" :rules="loginFormRules" label-width="0px" class="login_form">
  10. <!-- 用户名 -->
  11. <el-form-item prop="username">
  12. <el-input ref="userName" v-model="loginForm.username" prefix-icon="iconfont icon-user"></el-input>
  13. </el-form-item>
  14. <!-- 密码 -->
  15. <el-form-item prop="password">
  16. <el-input ref="password" v-model="loginForm.password" prefix-icon="iconfont icon-3702mima" type="password"></el-input>
  17. </el-form-item>
  18. <!-- 按钮区域 -->
  19. <el-form-item class="btns">
  20. <el-button type="primary" @click="login">登录</el-button>
  21. <el-button type="info" @click="resetLoginForm">重置</el-button>
  22. </el-form-item>
  23. </el-form>
  24. </div>
  25. </div>
  26. </template>
  27. <script>
  28. //
  29. import {
  30. login} from '@/api/login'
  31. // import {
  32. // login
  33. // } from '@/api/login';
  34. export default {
  35. name: "login",
  36. data() {
  37. return {
  38. //登录返回的数据
  39. resData:null,
  40. // 这是登录表单的数据绑定对象
  41. loginForm: {
  42. username: '',
  43. password: ''
  44. // username:"",
  45. // password:""
  46. },
  47. // 这是表单的验证规则对象
  48. loginFormRules: {
  49. // 验证用户名是否合法
  50. username: [{
  51. required: true, message: '请输入登录名称', trigger: 'blur' }, {
  52. min: 3, max: 10, message: '长度在 3 到 10 个字符', trigger: 'blur' }],
  53. // 验证密码是否合法
  54. password: [{
  55. required: true, message: '请输入登录密码', trigger: 'blur' }, {
  56. min: 6, max: 15, message: '长度在 6 到 15 个字符', trigger: 'blur' }]
  57. }
  58. }
  59. },
  60. mounted(){
  61. this.getAccount()
  62. },
  63. methods: {
  64. getAccount(){
  65. this.loginForm.username = "admin"
  66. this.loginForm.password = "123456"
  67. },
  68. // 点击重置按钮,重置登录表单
  69. resetLoginForm() {
  70. //this.$refs.loginFormRef.resetForm()
  71. // this.loginForm.username = ""
  72. // this.loginForm.password = ""
  73. // console.log(this.loginForm.username)
  74. this.$refs.loginFormRef.resetFields();
  75. // console.log(this.loginForm.username)
  76. },
  77. login() {
  78. this.$refs.loginFormRef.validate(valid =>{
  79. if(valid){
  80. console.log(this.loginForm)
  81. login(this.loginForm.username,this.loginForm.password).then(res =>{
  82. this.resData = res.data;
  83. console.log(this.resData)
  84. if(this.resData == null){
  85. this.$modal.msgError("密码输入错误")
  86. }else{
  87. this.$router.push("/CopyMenu")
  88. }
  89. })
  90. }
  91. })
  92. // this.$refs.loginFormRef.validate(async valid => {
  93. // if (!valid) return
  94. // const {
  95. data: res } = await this.$http.post('login', this.loginForm)
  96. // if (res.meta.status !== 200) return this.$message.error('登录失败!')
  97. // this.$message.success('登录成功')
  98. // // 1. 将登录成功之后的 token,保存到客户端的 sessionStorage 中
  99. // // 1.1 项目中出了登录之外的其他API接口,必须在登录之后才能访问
  100. // // 1.2 token 只应在当前网站打开期间生效,所以将 token 保存在 sessionStorage 中
  101. // window.sessionStorage.setItem('token', res.data.token)
  102. // // 2. 通过编程式导航跳转到后台主页,路由地址是 /home
  103. // this.$router.push('/home')
  104. // })
  105. }
  106. }
  107. }
  108. </script>
  109. <style lang="less" scoped>
  110. .login_container {
  111. background-color: turquoise;
  112. height: 100%;
  113. }
  114. .login_box {
  115. width: 450px;
  116. height: 300px;
  117. background-color: azure;
  118. border-radius: 3px;
  119. position: absolute;
  120. left: 50%;
  121. top: 50%;
  122. transform: translate(-50%, -50%);
  123. .avatar_box {
  124. height: 130px;
  125. width: 130px;
  126. border: 1px solid #eee;
  127. border-radius: 50%;
  128. padding: 10px;
  129. box-shadow: 0 0 10px #ddd;
  130. position: absolute;
  131. left: 50%;
  132. transform: translate(-50%, -50%);
  133. background-color: aquamarine;
  134. img {
  135. width: 100%;
  136. height: 100%;
  137. border-radius: 50%;
  138. background-color: #eee;
  139. }
  140. }
  141. }
  142. .login_form {
  143. position: absolute;
  144. bottom: 0;
  145. width: 100%;
  146. padding: 0 90px;
  147. box-sizing: border-box;
  148. }
  149. .btns {
  150. display: flex;
  151. justify-content: center;
  152. }
  153. </style>

**

(3)问题分析:

**
最基本的resetFields()生效的前几个条件:
在这里插入图片描述

(4)我的问题:

在分析了前面那几个的问题之后,我一开始是在created()钩子函数里面进行初始值赋值的,因此resetFields()函数生效之后,数据又回到了之前的默认赋值。
**

(5)解决方案

**
因此,解决方案,已经贴出来了,就是将赋值语句可以加在mounted()函数之中用于解决这个问题!
在这里插入图片描述
亲测,好使!!!

发表评论

表情:
评论列表 (有 0 条评论,141人围观)

还没有评论,来说两句吧...

相关阅读

    相关

    由于JQuery中,提交表单是像下面这样的: $('yigeform').reset(); 但是,不幸的是,这样写的话,会有一个让你很郁闷的结果,那就是,表单无法重