angularjs學習第五天筆記(第二篇:表單驗證升級篇)

来源:https://www.cnblogs.com/xiaoXuZhi/archive/2018/08/24/angularjs_formCheck_ngMessages.html
-Advertisement-
Play Games

angularjs表單驗證繼續學習,主要內容包括,失去焦點驗證、ngMessages ...


您好,我是一名後端開發工程師,由於工作需要,現在系統的從0開始學習前端js框架之angular,每天把學習的一些心得分享出來,如果有什麼說的不對的地方,請多多指正,多多包涵我這個前端菜鳥,歡迎大家的點評與賜教。謝謝!

  第五天,昨天學習了簡單的表單驗證,在昨天的基礎上,今天主要對錶單驗證進一步學習研究。

  今天主要學習一下幾點:文本框失去焦點後驗證、表單驗證提示信息顯示處理優化

  第一、文本框失去焦點後驗證

    文本框失去焦點驗證效果:文本框失去焦點後對其合法性驗證

    文本框失去焦點驗證實現方式:定義一個指令(指令後續專門研究)當文本框失去焦點是設置focused=true,獲得焦點為false

                  提示顯示信息添加併列顯示條件(focused)

    舉一個具體的練習實例

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <style type="text/css">
        .oneCount {
            width: 1000px;
            height: 60px;
            line-height: 60px;
            border-bottom: 1px solid blue;
        }

            .oneCount .titleCount {
                float: left;
                width: 150px;
                text-align: right;
            }

            .oneCount .valueCount {
                float: left;
                width: 300px;
                text-align: right;
            }

                .oneCount .valueCount input {
                    width: 300px;
                }

            .oneCount .alertCount {
                float: left;
                width: 520px;
                margin-left: 20px;
            }

                .oneCount .alertCount span {
                    float: left;
                    margin-left: 10px;
                    color: #ff0000;
                }

        .success {
            color: #19e1cf !important;
        }

        input .ng-pristine {
            color: #808080;
            border-bottom: 1px solid #ff0000;
        }

        input .ng-dirty {
            color: #000000;
        }

        input .ng-valid {
            color: #000000;
        }

        input .ng-invalid {
            color: #ff0000;
        }
    </style>
</head>
<body ng-app="myApp" ng-controller="myContro">
    <form name="loginForm" novalidate ng-submit="submitForm()">
        <div class="oneCount">
            <div class="titleCount">賬號:</div>
            <div class="valueCount">
                <input type="text" name="acount" ng-model="user.acount"
                       placeholder="必填:賬號必須由數字字母組合,長度在6-20"
                       required="required" ng-minlength="6" ng-maxlength="20"
                       ng-pattern="/^[0-9a-zA-Z]+$/"
                       ng-focus />
            </div>
            <div class="alertCount">
                <span class="warning">*</span>
                <div class="warning"
                     ng-show="loginForm.acount.$invalid && ((!loginForm.acount.$focused && loginForm.acount.$dirty) || loginForm.submitted )">
                    <span class="warning"
                          ng-show="loginForm.acount.$error.required">acount必填</span>
                    <span class="warning"
                          ng-show="loginForm.acount.$error.minlength">最少長度為6</span>
                    <span class="warning"
                          ng-show="loginForm.acount.$error.maxlength">最大長度為20</span>
                    <span class="warning"
                          ng-show="loginForm.acount.$error.pattern">賬號格式不符合要求(只能由數字和字母組成)</span>
                </div>
                <span class="success"
                      ng-show="!loginForm.acount.$focused &&loginForm.acount.$valid">賬號輸入正確</span>
            </div>
        </div>
        <div class="oneCount">
            <div class="titleCount">姓名:</div>
            <div class="valueCount">
                <input type="text" name="name" ng-model="user.name" placeholder="請輸入姓名" ng-maxlength="20"
                       ng-focus />
            </div>
            <div class="alertCount">
                <span class="warning" ng-show="!loginForm.name.$focused && loginForm.name.$error.maxlength">姓名最大長度為20</span>
                <span class="success" ng-show="!loginForm.name.$focused && loginForm.name.$dirty && loginForm.name.$valid">姓名輸入正確</span>
            </div>
        </div>
        <div class="oneCount">
            <div class="titleCount"></div>
            <div class="valueCount">
                <input type="submit" value="提交" style="width:40px;" />
            </div>
        </div>
    </form>
</body>
</html>
<script src="Scripts/angular.js"></script>
<script type="text/javascript">
    var app = angular.module("myApp", []);
    app.controller("myContro", function ($scope) {
        $scope.user = {
            acount: "w額外",
            name: "",
            age: "",
            pass: "",
            rePass: ""
        };

        $scope.submitted = false;

        //提交表單接受函數
        $scope.submitForm = function () {
            if ($scope.loginForm.$valid) {
                //// 表單數據真實提交邏輯
            } else {
                $scope.loginForm.submitted = true;
            }
        }
    });

    app.directive('ngFocus', function () {
        var FOCUS_CLASS = "ng-focused";
        return {
            restrict: 'A',
            require: 'ngModel',
            link: function (scope, element, attrs, ctrl) {
                ctrl.$focused = false;
                element.bind('focus', function (evt) {
                    element.addClass(FOCUS_CLASS);
                    scope.$apply(function () {
                        ctrl.$focused = true;
                    });
                }).bind('blur', function () {
                    element.removeClass(FOCUS_CLASS);
                    scope.$apply(function () {
                        ctrl.$focused = false;
                    })
                })
            }
        }
    })
</script>

 

  第二、表單驗證提示信息顯示處理優化

    上面的表單驗證的提示信息在體驗上不是很友好,同一個文本框有可能同時顯示多個提示信息

    新版本的angularjs中,引入了ngMessages指令,用於更加友好的處理方式

      ngmessages同時指出提示模板引入,通過ng-messges-include 來載入外部提示模板

  直接上練習例子

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
</head>
<body ng-app="myApp" ng-controller="myContro">
    <form name="loginForm" novalidate ng-submit="submitForm()">
        <div class="oneCount">
            <div class="titleCount">賬號:</div>
            <div class="valueCount">
                <input type="text" name="acount" ng-model="user.acount"
                       placeholder="必填:賬號必須由數字字母組合,長度在6-20"
                       required="required" ng-minlength="6" ng-maxlength="20"
                       ng-pattern="/^[0-9a-zA-Z]+$/"
                       ng-focus />
            </div>
            <div class="alertCount">
                <span class="warning">*</span>
                <div class="warning" ng-messages="loginForm.acount.$error">
                    <ng-messages-include src="template/required.html"></ng-messages-include>
                    <span class="warning"
                          ng-message="minlength">該項最少長度為6</span>
                    <span class="warning"
                          ng-message="maxlength">該項最大長度為20</span>
                    <div ng-messages-include="template/numberAndZhiMu.html">
                    </div>
                </div>
            </div>
        </div>
        <div class="oneCount">
            <div class="titleCount"></div>
            <div class="valueCount">
                <input type="submit" value="提交" style="width:40px;" />
            </div>
        </div>
    </form>
</body>
</html>
<script src="Scripts/angular.js"></script>
<script src="Scripts/angular-messages.js"></script>
<script type="text/javascript">
    var app = angular.module("myApp", ['ngMessages']);
    app.controller("myContro", function ($scope) {
        $scope.user = {
            acount: ""
        };

        $scope.submitted = false;

        //提交表單接受函數
        $scope.submitForm = function () {
            if ($scope.loginForm.$valid) {
                //// 表單數據真實提交邏輯
            } else {
                $scope.loginForm.submitted = true;
            }
        }
    });
</script>

 

時間不早了,明天在仔細研究該問題

 

今天就到此為止,明天繼續研究表單驗證,明天學習包括如下幾點

  表單驗證繼續研究

  指令簡單瞭解學習

 

  


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

-Advertisement-
Play Games
更多相關文章
  • 作者:Derek 簡介 Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockchain/bytom 本章介紹Derek解讀 Bytom源碼分析 持久化存儲LevelDB 作者使用MacOS操作系統,其 ...
  • 在創建一個對象的時候我們經常會用到init方法,單單是init只能是初始化,當我們在初始化的時候想要給這個對象加上預設的東西的時候, 系統提供的init方法就不能滿足我們的需要,這時,就需要我們自己去重寫init方法; 通常在使用init方法的時候,系統先會在自己這個類中查詢是否實現(重寫)這個方法 ...
  • 一次“Error Domain=AVFoundationErrorDomain Code= 11841”的調試 起因 最近在重構視頻輸出模塊的時候,調試碰到AVAssetReader 調用開始方法總是返回NO而失敗,代碼如下: reader的創建代碼如下,主要用的是GPUImageMovieComp ...
  • 基本屬性 setTabSelectedListener監聽器 BadgeItem標記 1.五角星標記 2.文本標記 官方all.gif view源碼下載地址 ...
  • 一、什麼是handler? 註:線程分為主線程(主線程又叫UI線程,只能有一個主線程)和子線程(可以有多個)Handler只能在主線程里運行 handler是Android給我們提供用來更新UI的一套機制,也是一套消息處理機制,我們可以發消息,也可以通過它 處理消息。 1 2 因為android在設 ...
  • 我們都知道在UI線程中不能進行耗時操作,例如數據讀寫、網路請求。Android 4.0開始,在主線程中進行網路請求甚至會拋出Android.os.NetworkOnMainThreadException。這個時候,我們就會開始依賴Handler。我們在子線程進行耗時操作後,將請求結果通過Handle ...
  • 首先我們來說說什麼是事件冒泡 事件冒泡:子級尋找父級的過程 當子級觸發事件時,這個事件會形成一個時間流,這個事件流會逐步的向上傳播, 所經過的父級的和子級相同的事件會被執行 事件捕獲:父級查找子級的過程叫事件捕獲 當子級觸發一個事件時會觸發事件流,這個事件流會從父級傳遞到子級,所經過的 所有子級的相 ...
  • Html學習筆記1 特殊符號:html中對換行縮進空格不敏感,都只會解析成一個空格 空格:&nbsp; < : &lt; > :$gt; 版權符號:&copy; 表格:1 表示表格:table表示表格 tr:表示行 td:單元格 tr和td只能寫在表格裡面 2 表格屬性:屬性: boder:邊框 w ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...