自定義組件觸發餓了么表單校驗

餓了么的表單控件,如果存在自定義組件更改了值,例如在el-from中存在原生input組件很有可能沒法觸發表單校驗,下拉框或者彈框組件仍然是報紅邊框。
這是因為餓了么的輸入框或者下拉框更改值的時候會自動觸發表單校驗,但是封裝過后的組件無法觸發校驗表單校驗。那么此時可以手動觸發餓了么的表單校驗。

源碼分析

在packages/form/src/form-item.vue中,可以找到addValidateEvents方法,該方法是用來給el-form-item的子組件綁定校驗事件的,如下:

addValidateEvents() {const rules = this.getRules();if (rules.length || this.required !== undefined) {this.$on('el.form.blur', this.onFieldBlur);this.$on('el.form.change', this.onFieldChange);}
}

在packages/input/src/input.vue中,可以找到el-input發送el.form.blur和el.form.change事件的代碼,這里只貼出el.form.change的代碼:

watch: {value(val) {this.$nextTick(this.resizeTextarea);if (this.validateEvent) {this.dispatch('ElFormItem', 'el.form.change', [val]);}}
}

這里用了dispatch方法,該方法的代碼在src/mixins/emitter.js中:

dispatch(componentName, eventName, params) {var parent = this.$parent || this.$root;var name = parent.$options.componentName;while (parent && (!name || name !== componentName)) {parent = parent.$parent;if (parent) {name = parent.$options.componentName;}}if (parent) {parent.$emit.apply(parent, [eventName].concat(params));}
}

由此可以看出,要觸發el-form的校驗,需要el-form-item中的子組件去發布el.form.change或el.form.blur等事件,由el-form-item監聽該事件,觸發表單校驗。

解決方案

方法一:在父頁面中直接調用表單的校驗方法validateField:

watch: {'passwordForm.newPassword': function() {this.$refs.passwordForm.validateField('newPassword')}
}

方法二:在父頁面中發布組件的el.form.change等事件:

<input ref="input" @blur="handleBlur">
<script>
export default {methods: {handleBlur (val) {this.$refs.input.$emit('el.form.blur', val)}}
}
</script>

方法三:在子組件中發布el.form.change等事件,此時無需在父頁面中做任何處理,其中dispatch方法直接將上面所說的emitter.js中的代碼拷貝過來即可:

export default {methods: {dispatch(componentName, eventName, params) {// ... 從emitter.js中拷貝過來的代碼},handleInput (e) {this.$emit('input', e.target.value)this.dispatch('ElFormItem', 'el.form.change', [e.target.value])}}
}

以下是我某項目的解決方法,使用的方法2,即找到el-form-item然后觸發el.form.change事件。

 methods: {confirm() {this.$emit("confirm", result);this.$nextTick(() => {parent && parent.$emit("el.form.blur", result); // 重點!觸發表單校驗 el.form.change, el.form.blurparent && parent.$emit("el.form.change", result); // 重點!觸發表單校驗});},},// 找到el-form-item元素的代碼mounted() {let parent = this.$parent;while (parent) { if (parent.$options.name === "ElFormItem") {this.parent = parent;break;}parent = parent.$parent;}
},

原文博客:非el組件/自定義組件觸發el-form的校驗
個人博客: 自定義組件觸發餓了么表單校驗

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/75640.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/75640.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/75640.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

架構思維:查詢分離 - 表數據量大查詢緩慢的優化方案

文章目錄 Pre引言案例何謂查詢分離&#xff1f;何種場景下使用查詢分離&#xff1f;查詢分離實現思路1. 如何觸發查詢分離&#xff1f;方式一&#xff1a; 修改業務代碼&#xff1a;在寫入常規數據后&#xff0c;同步建立查詢數據。方式二&#xff1a;修改業務代碼&#xff1a;…

Linux開發工具——make/makefile

&#x1f4dd;前言&#xff1a; 這篇文章我們來講講Linux開發工具——make/makefile&#xff1a; &#x1f3ac;個人簡介&#xff1a;努力學習ing &#x1f4cb;個人專欄&#xff1a;Linux &#x1f380;CSDN主頁 愚潤求學 &#x1f304;其他專欄&#xff1a;C學習筆記&#xf…

python加載訓練好的模型并進行葉片實例分割預測

要基于“GMT: Guided Mask Transformer for Leaf Instance Segmentation”進行代碼復現&#xff0c;可按照以下步驟利用Python實現&#xff1a; 環境配置 克隆倉庫&#xff1a;在終端中使用git clone https://github.com/vios-s/gmt-leaf-ins-seg.git命令&#xff0c;將項目代…

AI平臺初步規劃實現和想法

要實現一個類似Coze的工作流搭建引擎&#xff0c;可以結合SmartEngine作為后端工作流引擎&#xff0c;ReactFlow作為前端流程圖渲染工具&#xff0c;以及Ant Design作為UI組件庫。以下是實現的步驟和關鍵點&#xff1a; ### 1. 后端工作流引擎&#xff08;SmartEngine&#xf…

Pycharm 啟動時候一直掃描索引/更新索引 Update index/Scanning files to index

多個項目共用一個虛擬環境&#xff0c;有助于加快PyCharm 啟動嗎 chatgpt 4o認為很有幫助&#xff0c;gemini 2.5pro認為沒鳥用&#xff0c;我更認可gemini的觀點。不知道他們誰在一本正經胡說八道。 -------- 打開pycharm的時候&#xff0c;下方的進度條一直顯示在掃描文件…

dify新版本1.1.3的一些問題

本人使用window版本上構建dify&#xff0c;采用docker方法啟動 1、拉取鏡像問題 windows上更改拉取鏡像倉庫地址 優化加速參考&#xff1a;青春不留白/Docker-hub 如果還是拉取比較慢的話&#xff0c;建議科學上網解決。 2、啟動問題 發生報錯Dify:failed to init dify plu…

4.2-3 fiddler抓取手機接口

安卓&#xff1a; 長按手機連接的WiFi&#xff0c;點擊修改網絡 把代理改成手動&#xff0c;服務器主機選擇自己電腦的IP地址&#xff0c;端口號為8888&#xff08;在dos窗口輸入ipconfig查詢IP地址&#xff0c;為ipv4&#xff09; 打開手機瀏覽器&#xff0c;輸入http://自己…

Spring Boot中自定義注解的創建與使用

&#x1f31f; 前言 歡迎來到我的技術小宇宙&#xff01;&#x1f30c; 這里不僅是我記錄技術點滴的后花園&#xff0c;也是我分享學習心得和項目經驗的樂園。&#x1f4da; 無論你是技術小白還是資深大牛&#xff0c;這里總有一些內容能觸動你的好奇心。&#x1f50d; &#x…

2024第十五屆藍橋杯大賽軟件賽省賽C/C++ 大學 B 組

記錄刷題的過程、感悟、題解。 希望能幫到&#xff0c;那些與我一同前行的&#xff0c;來自遠方的朋友&#x1f609; 大綱&#xff1a; 1、握手問題-&#xff08;解析&#xff09;-簡單組合問題&#xff08;別人叫她 鴿巢定理&#xff09;&#x1f607;&#xff0c;感覺叫高級了…

HTML應用指南:利用POST請求獲取三大運營商5G基站位置信息(一)

在當前信息技術迅猛發展的背景下,第五代移動通信(5G)技術作為新一代的無線通信標準,正逐步成為推動社會進步和產業升級的關鍵驅動力。三大電信運營商(中國移動、中國聯通、中國電信)在全國范圍內的5G基站部署,不僅極大地提升了網絡性能,也為智能城市、物聯網、自動駕駛…

C++學習之線程

目錄 1.進程和線程的概念 2.線程內核三級映射 3.線程優缺點 4.創建線程和獲取線程ID的函數 5.創建子線程 6.循環創建N個子線程 7.子線程傳參地址錯誤演示分析 8.主、子線程共享全局變量、堆空間 9.線程退出 10.pthread join回收線程退出值 11.pthread_cancel 12.殺死…

element-plus中,表單校驗的使用

目錄 一.案例1&#xff1a;給下面的表單添加校驗 1.目的要求 2.步驟 ①給需要校驗的el-form-item項&#xff0c;添加prop屬性 ②定義一個表單校驗對象&#xff0c;里面存放了每一個prop的檢驗規則 ③給el-form組件&#xff0c;添加:rules屬性 ④給el-form組件&#xff0…

團體設計程序天梯賽L2-025 # 分而治之

文章目錄 題目解讀輸入格式輸出格式 思路Ac Code參考 題目解讀 在戰爭中&#xff0c;我們希望首先攻下敵方的部分城市&#xff0c;使其剩余的城市變成孤立無援&#xff0c;然后再分頭各個擊破。為此參謀部提供了若干打擊方案。本題就請你編寫程序&#xff0c;判斷每個方案的可…

Arduino示例代碼講解:Knock Sensor 敲擊感知器

Arduino示例代碼講解:Knock Sensor 敲擊感知器 Knock Sensor 敲擊感知器功能概述硬件部分:軟件部分:代碼逐行解釋定義常量定義變量`setup()` 函數`loop()` 函數工作原理Knock Sensor 敲擊感知器 這段代碼是一個Arduino示例程序,用于檢測敲擊聲。它通過讀取一個壓電元件(p…

【百日精通JAVA | SQL篇 | 第三篇】 MYSQL增刪改查

SQL得最核心就是增刪改查 一個后端開發&#xff0c;在工作中&#xff0c;最常見的場景就是CRUD。 插入數據 insert into student values (1,zhangsan); 指定列插入數據 同時多個列明之間使用逗號&#xff0c;來分割 insert into student (name) values (zhaoliu); 這個黑框…

ggscitable包通過曲線擬合深度挖掘一個陌生數據庫非線性關系

很多新手剛才是總是覺得自己沒什么可以寫的&#xff0c;自己不知道選什么題材進行分析&#xff0c;使用scitable包ggscitable包后這個完全不用擔心&#xff0c;選題多到你只會擔心你寫不完&#xff0c;寫得不夠快。 既往咱們使用scitable包交互效應深度挖掘一個陌生數據庫&…

ctfshow VIP題目限免 版本控制泄露源碼2

根據題目提示是版本控制泄露源碼 版本控制&#xff08;Version Control&#xff09;是一種在軟件開發和其他領域中廣泛使用的技術&#xff0c;用于管理文件或項目的變更歷史。 主流的版本控制工具&#xff1a; ?Git?&#xff1a;目前最流行的分布式版本控制系統。?SVN?&am…

2025-04-05 吳恩達機器學習5——邏輯回歸(2):過擬合與正則化

文章目錄 1 過擬合1.1 過擬合問題1.2 解決過擬合 2 正則化2.1 正則化代價函數2.2 線性回歸的正則化2.3 邏輯回歸的正則化 1 過擬合 1.1 過擬合問題 欠擬合&#xff08;Underfitting&#xff09; 模型過于簡單&#xff0c;無法捕捉數據中的模式&#xff0c;導致訓練誤差和測試誤…

如何用人工智能大模型,進行作業批改?

今天我們學習人工智能大模型如何進行作業批改。手把手學習視頻請訪問https://edu.csdn.net/learn/40402/666452 第一步&#xff0c;進入訊飛星火。打開google瀏覽器&#xff0c;輸入百度地址后&#xff0c;搜索”訊飛星火”&#xff0c;在搜索的結果中&#xff0c;點第一個訊飛…

C++學習筆記之 模板|函數模板|類模板

函數模板 類模板 定義&#xff1a;函數模板是建立一個通用函數&#xff0c;它所用到的數據的類型&#xff08;包括返回值類型、形參類型、局部變量類型 &#xff09;可以不具體指定&#xff0c;而是用一個虛擬的類型來代替&#xff08;用標識符占位&#xff09;&#xff0c;在…