AngularJs表單驗證

来源:http://www.cnblogs.com/andyhxl/archive/2017/10/18/7688226.html
-Advertisement-
Play Games

轉載請註明出處 http://www.023996.cn/hyxw/s1129.html Anjularjs表單驗證 能夠根據用戶在表單中輸入的內容給出實時視覺反饋是非常重要的。在人與人溝通的語境中,表單驗證給出來的反饋同獲得正確輸入同等重要。 表單驗證不僅能給用戶提供有用的反饋,同時也能保護我們的 ...


轉載請註明出處 http://www.023996.cn/hyxw/s1129.html

Anjularjs表單驗證

  能夠根據用戶在表單中輸入的內容給出實時視覺反饋是非常重要的。在人與人溝通的語境中,表單驗證給出來的反饋同獲得正確輸入同等重要。

  表單驗證不僅能給用戶提供有用的反饋,同時也能保護我們的Web應用不會被惡意或者錯誤的輸入所破壞。我們要在Web前端儘力保護後端。

  AngularJS能夠將HTML5表單驗證功能同它自己的驗證指令結合起來使用,並且非常方便。AngularJS提供了很多表單驗證指令。

<form name="form" novalidate>
    <label name="email">Your email</label>
    <input type="email" name="email" ng-model="email" placeholder="Email Address"/>
</form>

要使用表單驗證,首先要確保表單像上面的例子一樣有一個 name 屬性。

  所有輸入欄位都可以進行基本的驗證,比如最大、最小長度等。這些功能是由新的HTML5表單屬性提供的。

  如果想要屏蔽瀏覽器對錶單的預設驗證行為,可以在表單元素上添加 novalidate 標記

 

  1. 必填項 required 

  驗證某個表單輸入是否已填寫,只要在輸入欄位元素上添加HTML5標記 required 即可:

  註釋:required 屬性適用於以下 <input> 類型:text, search, url, telephone, email, password, date pickers, number, checkbox, radio 以及 file

<input type="text" required />

   

  2. 最小長度 ng-minleng="{number}"

  驗證表單輸入的文本長度是否大於某個最小值,在輸入欄位上使用AngularJS指令 ng-minleng="{number}" 

<input type="text" ng-minlength="5" />

 

  3. 最大長度 ng-maxlength="{number}" 

  驗證表單輸入的文本長度是否小於或等於某個最大值,在輸入欄位上使用AngularJS指令 ng-maxlength="{number}" 

<input type="text" ng-maxlength="20" />

 

  4. 模式匹配  ng-pattern="/PATTERN/"

  使用 ng-pattern="/PATTERN/" 來確保輸入能夠匹配指定的正則表達式:

<input type="text" ng-pattern="[a-zA-Z]" />

  

  5. 電子郵件

  驗證輸入內容是否是電子郵件,只要像下麵這樣將 input 的類型設置為 email 即可:

<input type="email" name="email" ng-model="user.email" />

 

  6. 數字

  驗證輸入內容是否是數字,將 input 的類型設置為 number :

<input type="number" name="age" ng-model="user.age" />

 

 7. URL

  驗證輸入內容是否是URL,將 input 的類型設置為 url :

<input type="url" name="homepage" ng-model="user.facebook_url" />

 

在表單中控制變數

  表單的屬性可以在其所屬的 $scope 對象中訪問到,而我們又可以訪問 $scope 對象,因此JavaScript可以間接地訪問DOM中的表單屬性。藉助這些屬性,我們可以對錶單做出實時(和AngularJS中其他東西一樣)響應。這些屬性包括下麵這些。(註意,可以使用下麵的格式訪問這些屬性。)

  formName.inputFieldName.property
 

 ■未修改的表單

  這是一個布爾屬性,用來判斷用戶是否修改了表單。如果未修改,值為 true ,如果修改過值為 false

formName.inputFieldName.$pristine

 

 ■修改過的表單

  只要用戶修改過表單,無論輸入是否通過驗證,該值都返回 true 

formName.inputFieldName.$dirty

 

 ■合法的表單

  這個布爾型的屬性用來判斷表單的內容是否合法。如果當前表單內容是合法的,下麵屬性的值就是 true :

formName.inputFieldName.$valid

 

■ 不合法的表單

  這個布爾屬性用來判斷表單的內容是否不合法。如果當前表單內容是不合法的,下麵屬性的值為 true :

formName.inputFieldName.$invalid

 

■ 錯誤

  這是AngularJS提供的另外一個非常有用的屬性: $error 對象。它包含當前表單的所有驗證內容,以及它們是否合法的信息。用下麵的語法訪問這個屬性:

formName.inputfieldName.$error

 

 

$parsers

  當用戶同控制器進行交互,並且 ngModelController 中的 $setViewValue() 方法被調用時,$parsers 數組中的函數會以流水線的形式被逐個調用。第一個 $parse 被調用後,執行結果會傳遞給第二個 $parse ,以此類推

  這些函數可以對輸入值進行轉換,或者通過 $setValidity() 函數設置表單的合法性。

  使用 $parsers 數組是實現自定義驗證的途徑之一。

  例如,假設我們想要確保輸入值在某兩個數值之間,可以在 $parsers 數組中入棧一個新的函數,這個函數會在驗證鏈中被調用。

  每個 $parser 返回的值都會被傳入下一個 $parser 中。當不希望數據模型發生更新時返回undefined 。

 

 html 

<!DOCTYPE html>
<html ng-app="myApp">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>表單測試</title>
    <link rel="stylesheet" href="">
    <script type="text/javascript" src="angular.1.2.13.js"></script>
</head>
<body>
    <div ng-controller="TestController">
        <form name="testForm">
            <input type="number" name="inputs" ng-test ng-model="obj.number">
            <span ng-show="testForm.inputs.$error.test">good</span>
            <span ng-hide="testForm.inputs.$error.test">bad</span>
            <div>{{ testForm.inputs.$valid }}</div>
            <div>{{ testForm.inputs.$invalid }}</div>
            <div>{{ obj.number }}</div>
        </form>
    </div>
    <script type="text/javascript" src="test5app.js"></script>
</body>
</html>

 

javascript  ( test5app.js )

angular.module('myApp', []).controller('TestController', function($scope) {
    $scope.obj = {
        number: 34
    }
}).directive('ngTest', function() {
    return {
        require: '?ngModel',
        restrict: 'AE',
        link: function($scope, iElm, iAttrs, ngModel) {
            if (!ngModel) return;
            ngModel.$parsers.push(function(viewValue) {
                var num = parseInt(viewValue);
                if (num >= 0 && num < 99) {
                    ngModel.$setValidity('test', true);
                    return viewValue
                } else {
                    ngModel.$setValidity('test', false);
                    return undefined
                }
            })
        }
    }
});

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 什麼是中介者模式? 在現實生活中,有很多中介者模式的身影,例如QQ游戲平臺,聊天室、QQ群、簡訊平臺和房產中介。不論是QQ游戲還是QQ群,它們都是充當一個中間平臺,QQ用戶可以登錄這個中間平臺與其他QQ用戶進行交流,如果沒有這些中間平臺,我們如果想與朋友進行聊天的話,可能就需要當面才可以了。電話、短 ...
  • 繼承:當前對象沒有的屬性和方法,別人有,拿來給自己用,就是繼承 1 混入式繼承 2.原型繼承 a) 給原型對象添加新成員(通過對象的動態特性),不是嚴格意義上的繼承 ,,,,實例對象繼承了原型 b) 直接替換原型對象 c) 利用混入的方式給原型對象添加成員 3.經典繼承 js var 對象1 = O ...
  • 運算符用於執行程式代碼運算,會針對一個及以上操作數項目來進行運算。2+3,其操作數是2和3,而運算符則是“+”。上一篇我們說過變數用來存儲數據,而同一個變數中的數據在不同的時刻可以不同,在程式的運行過程中,我們根據需要將數據進行相應規則的運算以得到預期的結果,運算符則是其中運算的規則。 運算符在js ...
  • 移動端用zepto做的頁面,突然發現on綁定的click事件並沒有觸發,代碼如下: 我把此寫法改成非事件委托的方式,發現該click事件就能觸發 最後$(document)換成$('body')或者$('ul')試試,實驗結果是: $(document) 不行 $(‘body') 不行 $(‘ul' ...
  • 本文是Javascript高級程式設計 第1章的筆記,主要介紹了: Javascript和ECMAScript的關係; 宿主環境; DOM和API的相關概念 ...
  • 要考慮函數可被可重覆使用(調用),需要將可變化的變為參數封裝起來 table載入成功寫的函數,是因為我自己需要才寫的。把table里的數據放在全局變數後,查詢詳細信息就不用再做ajax。這個'load-success.bs.table'api我還有個問題,當這個table被多次load-succes ...
  • 絕對地址和相對地址是網站開發基礎知識中很重要的知識點。1.在網頁中插入文件時,不可以使用硬碟的絕對路徑 舉個例子,在網頁中插入圖片,代碼如下: <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/ht ...
  • 前言 編程時我們往往拿到的是業務流程正確的業務說明文檔或規範,但實際開發中卻佈滿荊棘和例外情況,而這些例外中包含業務用例的例外,也包含技術上的例外。對於業務用例的例外我們別無它法,必須要求實施人員與用戶共同提供合理的解決方案;而技術上的例外,則必須由我們碼農們手刃之,而這也是我想記錄的內容。 我打算 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...