【it修真院小課堂第132期】angular js常用指令 ng-blur、ng-change、ng-focus、ng-disabled是如何運(yùn)用到表單驗(yàn)證中的?

1.背景介紹

1.1原生js表單驗(yàn)證的劣勢(shì)

我們?cè)讷@取用戶輸入值的時(shí)候,有一個(gè)必要的環(huán)節(jié)就是進(jìn)行表單驗(yàn)證,javascript有一些好用的表單驗(yàn)證功能,但是也存在一些問(wèn)題,比如進(jìn)行簡(jiǎn)單的事件監(jiān)聽(tīng)往往需要寫大量的獲取數(shù)據(jù)以及數(shù)據(jù)呈現(xiàn)的代碼

1.2angular js在表單驗(yàn)證中的優(yōu)勢(shì)

angular在數(shù)據(jù)獲取、動(dòng)態(tài)綁定、頁(yè)面呈現(xiàn)等方面有很大的優(yōu)勢(shì),可以將大量繁多的代碼進(jìn)行簡(jiǎn)化,在表單驗(yàn)證方面,angular也有其特殊的優(yōu)勢(shì)

2.知識(shí)剖析

2.1ng-blur

ng-blur 指令用于告訴 AngularJS HTML 元素在失去焦點(diǎn)時(shí)需要執(zhí)行的表達(dá)式;

AngularJS 中的 ng-blur 指令不會(huì)覆蓋原生的 onblur 事件, 如果觸發(fā)該事件,ng-blur 表達(dá)式與原生的 onblur 事件都會(huì)執(zhí)行。

2.2ng-focus

ng-focus 指令用于告訴 AngularJS 在 HTML 元素獲取焦點(diǎn)時(shí)需要執(zhí)行的操作ng-focus 指令不會(huì)覆蓋元素的原始 onfocus 事件, 事件觸發(fā)時(shí),ng-focus表達(dá)式與原始的 onfocus 事件將都會(huì)執(zhí)行。

2.3ng-change

ng-change 指令用于告訴 AngularJS 在 HTML 元素值改變時(shí)需要執(zhí)行的操作,ng-change 指令需要搭配 ng-model 指令使用。ng-change 事件在值的每次改變時(shí)觸發(fā),它不需要等待一個(gè)完成的修改過(guò)程,或等待失去焦點(diǎn)的動(dòng)作,ng-change 事件只針對(duì)輸入框值的真實(shí)修改,而不是通過(guò) JavaScript 來(lái)修改。

2.4ng-disable

ng-disabled 指令設(shè)置表單輸入字段的 disabled 屬性(input, select, 或 textarea)。如果 ng-disabled 中的表達(dá)式返回 true 則表單字段將被禁用。

3.常見(jiàn)問(wèn)題

一般網(wǎng)上只給出每個(gè)方法的單獨(dú)的使用方法,比較簡(jiǎn)單,但在實(shí)際的表單驗(yàn)證的過(guò)程中,需要將不同的方法結(jié)合起來(lái),通過(guò)變量值來(lái)判斷如何將表單驗(yàn)證結(jié)果呈現(xiàn)出來(lái),而controller中一般設(shè)置好判斷函數(shù),跟具體的情況來(lái)改變量的值。

4.解決方案

ng-blur/ng-change/ng-focus的用法是類似的,都是當(dāng)某個(gè)事件觸發(fā)時(shí),可以進(jìn)行變量值變化或啟用函數(shù);

ng-disabled和ng-hide用法是類似的,都是可以改變頁(yè)面呈現(xiàn)的效果,而效果則取決于某個(gè)變量值;

這兩類方法需要通過(guò)變量配合起來(lái)使用,變量通過(guò)controller來(lái)進(jìn)行控制;

5.編碼實(shí)戰(zhàn)

上圖為表單驗(yàn)證demo的UI

我們給input輸入框設(shè)置ng-blur、ng-change功能,當(dāng)input失焦時(shí),ng-blur會(huì)觸發(fā),然后啟動(dòng)inputCheck()函數(shù);同樣的,當(dāng)輸入框內(nèi)容改變時(shí),會(huì)觸發(fā)ng-minCheck()函數(shù)。最底下兩個(gè)div是提示框,設(shè)置了ng-hide指令,提示框的隱藏或顯示會(huì)根據(jù)變量var1和var2的布爾值來(lái)判斷。


上圖為inputCheck函數(shù),用來(lái)檢驗(yàn)輸入框輸入的值是否為空


上圖為minCheck函數(shù),用來(lái)檢驗(yàn)輸入框輸入的位數(shù)是否小于5


上圖為給變量var1和var2設(shè)置的初始值,讓提示框最初狀態(tài)為隱藏


上圖為失焦的時(shí)候出現(xiàn)了提示框


上圖為輸入框輸入位數(shù)小于5的時(shí)候,會(huì)提示位數(shù)小于5

目前實(shí)現(xiàn)了基本的功能,即ng-blur事件和ng-change事件都可以正常觸發(fā),函數(shù)也可以

正常對(duì)輸入框的值進(jìn)行判斷,但是現(xiàn)在依然存在一些問(wèn)題:

1.ng-blur事件是在失焦之后觸發(fā),但是事件發(fā)生以后卻無(wú)法改變,它自己不能再根據(jù)值的變化變回去了,

這會(huì)導(dǎo)致輸入框在開(kāi)始輸入值的時(shí)候,ng-blur觸發(fā)的事件依然存在

2.ng-change觸發(fā)以后,如果用戶最終沒(méi)有任何值輸入,那么ng-blur事件觸發(fā)的時(shí)候,

ng-change事件留下來(lái)的提示框就不該顯示了,但由于同樣的原因,依舊會(huì)顯示出來(lái),

如下圖所示:


上圖為兩種驗(yàn)證同時(shí)出現(xiàn)的bug

因此我們需要對(duì)代碼再進(jìn)行一波調(diào)試:

$scope.var2=true;可以保證用戶在輸入值為空的情況下,位數(shù)提示框就不顯示了


在位數(shù)檢測(cè)函數(shù)中,添加了一個(gè)if語(yǔ)句判斷,就是加入用戶已經(jīng)開(kāi)始輸入了,那么必填項(xiàng)

輸入框就應(yīng)該消失;

調(diào)試完之后,我們的這個(gè)簡(jiǎn)單的表單驗(yàn)證功能就實(shí)現(xiàn)了

6.擴(kuò)展思考

angular還有那些好用的表單驗(yàn)證功能?

7.參考文獻(xiàn)

菜鳥教程

8.更多思考

ng-message有什么優(yōu)勢(shì)

PPT鏈接:https://ptteng.github.io/PPT/PPT/js-08-ng-blur%20.html#/

視頻鏈接:https://v.qq.com/x/page/b0512gnftq5.html


【it修真院-線上小課堂】ng-blur等表單驗(yàn)證_騰訊視頻

技能樹(shù).IT修真院

“我們相信人人都可以成為一個(gè)工程師,現(xiàn)在開(kāi)始,找個(gè)師兄,帶你入門,掌控自己學(xué)習(xí)的節(jié)奏,學(xué)習(xí)的路上不再迷?!薄?/p>

這里是技能樹(shù).IT修真院,成千上萬(wàn)的師兄在這里找到了自己的學(xué)習(xí)路線,學(xué)習(xí)透明化,成長(zhǎng)可見(jiàn)化,師兄1對(duì)1免費(fèi)指導(dǎo)??靵?lái)與我一起學(xué)習(xí)吧?!

www.jnshu.com/login/1/95798135

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 除了使用ng-message進(jìn)行表單驗(yàn)證外,我們還可以用angular哪些指令進(jìn)行驗(yàn)證呢? ng-blur ng-...
    一木_qintb閱讀 2,342評(píng)論 1 2
  • 1.背景介紹 指令是一個(gè)Dom元素上的標(biāo)簽(和元素上的屬性, CSS類樣式一樣,屬于這個(gè)Dom元素)它告訴Angu...
    cczhuc閱讀 1,325評(píng)論 0 1
  • 表單基礎(chǔ)知識(shí) 在HTML中,表單是由 元素來(lái)表示的,而在JS中,表單對(duì)應(yīng)的則是HTMLFormElement類型。...
    oWSQo閱讀 981評(píng)論 0 1
  • 昨天晚上,兒子突然就學(xué)會(huì)了漱口,真是讓媽媽開(kāi)心的事啊,教了好幾天終于成功了哈哈,兒子,干的漂亮。 爸爸說(shuō),我要看看...
    霖少爺閱讀 165評(píng)論 0 0
  • 今天早上我發(fā)現(xiàn)我干了一件傻事,昨天晚上的鬧鐘定錯(cuò)了,定成了5點(diǎn)半的時(shí)間。事情是這樣的,我和趙文杰起了床洗漱完...
    百合花楊顏鳴閱讀 489評(píng)論 0 1

友情鏈接更多精彩內(nèi)容