this.$refs[formName].validate is not a function


引言

本文解決 for 循環中對表單進行渲染的問題, 在這種情況下獲得表單的方法會得到一個數組而不是對象, 直接使用 validate 方法會報錯; 另外通過斷點調試了一下得到的結果, 發現確實是一個數組對象, 而且數組長度正式被渲染的表單數.

原文地址: http://blog.duhbb.com/2022/02/16/error-occurs-when-form-is-loop-generated/

歡迎訪問我的博客: http://blog.duhbb.com/

循環渲染 form

記錄 elementui 中 form 使用的一個坑: 當使用循環渲染來同時使用多個 form 的時候, 直接使用官方示例代碼來使用 form 的方法會報錯, 正確的寫法是這樣:

this.$refs[form][0].validate()

注意重點是后面加了數組取第 1 位的寫法, 因為此時直接用 form 的 ref 名字去尋找它的時候會發現返回了一個數組, 用 this.$refs[form] 的寫法就會出現找不到對象的情況.

以上內容來自: https://blog.csdn.net/github_37673306/article/details/108710979

原因探討

難道是因為模板中渲染了多個 "相同的表單", 而這些表單指向的 data() 中的響應對象是一樣的, 只要有一個表單修改了數據, 其他的表單關聯的數據也會被修改, 所以我們只要取第一個就行了?

項目中的驗證

主要是看下 this.$refs[form] 會得到什么東西.

通過斷點可以看到 this.$refs[form] 得到了一個表單數組, 而且數組的個數恰好是表單渲染的個數.

表單放在循環中生成

Form 組件, 最好不要放到遍歷里面, 不然 ref 里的 formdata 是誰的都不知道.

或者改成

<Form ref='"formdata"+i' :model="formdata" :label-width="120">

其實你這個沒必要去生成兩個表單。而且一個 submit 只能提交一個表單.

表單的其他的坑

另外表單的坑還可以參考下面幾個, 感覺總結比較全面:

結束語

本文解決 for 循環中對表單進行渲染的問題, 在這種情況下獲得表單的方法會得到一個數組而不是對象, 直接使用 validate 方法會報錯; 另外通過斷點調試了一下得到的結果, 發現確實是一個數組對象, 而且數組長度正式被渲染的表單數.

原文地址: http://blog.duhbb.com/2022/02/16/error-occurs-when-form-is-loop-generated/

歡迎訪問我的博客: http://blog.duhbb.com/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM