• 使用表单


    一、校验表单

    1)novalidate  

    在自己的表单元素上增添novalidate属性,该属性定义于HTML5规范之中,用于告诉浏览器不要自己校验表单,从而允许angularjs不受干扰的工作。

    2)input元素的type属性值:

    checkbox 创建一个复选框

    email 创建一个接受邮件地址作为值的文本输入框

    number 创建一个接收数值类型作为值的文本输入框

    radio 创建一个单选框

    text 创建一个接收任何值的标准文本输入框

    url 创建一个接收URL作为值的文本输入框

    除了type属性所指定的格式之外,还可以通过混合使用HTML标准属性和angularjs指令,来实现更进一步的约束。例如required

    3)监控表单的有效性

    $pristine 如果用户没有与元素/表单产生交互,则返回true

    $dirty 如果用户与元素/表单产生过交互,则返回true

    $valid 当元素/表单内容的校验结果为有效时则返回true

    $invalid 当元素/表单内容的校验结果为无效时则返回true

    $error 提供校验错误的详情信息

    要向获得angularjs的最佳校验效果,必须为表单元素设置一些属性,首要的便是name属性,替换表单元素的指令将会定义一些有用的变量,用于表示表单数据的有效性,并且通过name属性的值来访问这些变量值。

    <form name="myForm" novalidate ng-submit="change()"></form>
    <button type="submit" ng-disabled="myForm.$invalid"></button>
    <form name="myForm" novalidate ng-submit="change()">
        <label>
            Eamil:
            <input name="userEmail" type="email" required />
        </label>
        <div class="error" ng-show="myForm.userEmail.$invalid && myForm.userEmail.$dirty">
            please enter a valid email address
        </div>
    </form>

    $error对象直到校验出问题时才会被定义,可以如下使用

    <div class="error" ng-show="myForm.userEmail.$invalid && myForm.userEmail.$dirty">
        {{getError(myForm.userEmail.$error)}}
    </div>
    $scope.getError=function(error){
        if(angular.isDefined(error)){
            if(error.required){
               return "please enter a value";
            }else if(error.email){
                return "please enter a valid email address";
            }
        }
    }

    二、提供表单校验反馈信息

    2.1 使用CSS提供校验反馈信息

    angularjs校验中用到的类

    ng-pristine 用户未曾交互过的元素被添加到这个类

    ng-dirty 用户曾经交互过的元素被添加到这个类

    ng-valid 校验结果为有效的元素在这个类中

    ng-invalid 校验结果为无效的元素在这个类中

    三、使用表单指令属性

    3.1 适用于input元素的属性

    ng-model 双向数据绑定

    ng-change 用于指定一个表达式,该表达式在元素内容被改变时被计算求值

    ng-minlength 设置一个合法元素所需的最小字符数

    ng-maxlength 设置一个合法元素所需的最大字符数

    ng-pattern 设置一个正则表达式,合法的元素内容必须匹配该正则表达式;当type属性值为email,url,number时,angularjs将会自动设置ng-pattern属性为相应的表达式,并检查格式是否匹配。对于这些类型的input元素不应再设置ng-pattern值。

    ng-required 通过数据绑定设置required属性值

    3.2 使用复选框

    当type属性为checkbox时可适用于input元素的属性

    ng-model

    ng-change

    ng-true-value 指定当元素被勾选时所绑定的表达式的值

    ng-false-value 指定当元素被取消勾选时所绑定的表达式的值

    ng-true-value ng-false-value属性的值将被用于设置所绑定的表达式的值,但是只在当复选框的勾选状态被改变时生效。也就是说模型属性(如果被隐式定义过的话)不会被自动创建,直到有用户与元素的交互发生时才会被创建。

    3.3 使用选择列表

    select元素的指令包括与Input元素类似的ng-required属性和可用于从数组和对象中生成option元素的ng-options属性

    $scope.todos = [
        { id: 100, action: "Get groceries", complete: false },
        { id: 200, action: "Call plumber", complete: false },
        { id: 300, action: "Buy running shoes", complete: true }];
    <select ng-model="selectValue" ng-options="item.action for item in todos"></select>
    <p>Selected: {{selectValue || 'None'}}</p>

    这是ng-options表达式的基本形式,形如“<标签>for<项目>in<数组>”这样的形式。生成的形式如下

    <select ng-model="selectValue">
        <option value="?" selected="selected"></option>
        <option value="0">Get gorceries</option>
        <option value="1">Call plumber</option>
        <option value="2">Buy running shoes</option>
    </select>

    注意select元素的输出里包括了一个option元素,其值是一个问号并且没有任何内容。angularjs在ng-model属性所指定的变量值为undefined时会生成这样的元素。可以通过添加一个空值的option元素来替代默认的option元素

    <select ng-model="selectValue" ng-options="item.action for item in todos">
        <option value="">(Pick One)</option>
    </select>

    默认情况下,用户选择了列表中某个选项之后,将会导致ng-model的表达式的值被更新为集合中的相应对象,结果如下:

    selected:{"id":300,"action":"Buy running shoes","complete":true}

    有时不想总使用整个源对象来设置ng-model的值,也可以使用一个稍微不同的表达式来为ng-options属性指定对象中的一个属性,如下:

    <select ng-model="selectValue"  ng-options="item.id as item.action for item in todos">
          <option value="">(Pick One)</option>
    </select>

    在表单中的表达式形如<所选属性>as<标签>for<变量>in<数组>,并且指定了item.id为当用户选择某个选项时欲使用的值,显示结果如下:

    selected:300

    创建选项组元素

    ng-options属性可以用来按照某个属性值将各个选项进行分组,为每个选项组生成一组optgroup元素。

     $scope.todos = [
          { id: 100, place: "Store", action: "Get groceries", complete: false },
          { id: 200, place: "Home", action: "Call plumber", complete: false },
          { id: 300, place: "Store", action: "Buy running shoes", complete: true }];
    <select ng-model="selectValue" ng-options="item.action group by item.place for item in todos">
           <option value="">(Pick One)</option>
    </select>

    在表单中的表达式形如<所选属性>as<标签>group by<分组类别>for<变量>in<数组>

    用于将对象进行分组的属性是在ng-options表达式中通过group by来进行指定的。

    <select ng-model="selectValue">
        <option value="">(pick one)</option>
        <optgroup label="Store">
            <option value="0">Get groceries</option>
            <option value="2">Buy running shoes</option>
        </optgroup>
        <optgroup label="Home">
            <option value="1">Call plumber</option>
        </optgroup>
    </select>
  • 相关阅读:
    netty的ChannelPipeline执行顺序对inBound和outBound执行器造成的影响
    【转载,并做少量修改整合】Java 双亲委派模型与应用:SPI(Service Provider Interface)
    JDK1.8 论ConcurrentHashMap是如何扩容的
    如何解决Vue.js里面noVNC的截图问题之后篇——用web虚拟终端作为替代功能
    hihocoder 1036 Trie图
    Codeforces#390
    Codeforces#386
    codeforces 743D Chloe and pleasant prizes
    codeforces 742E (二分图着色)
    洛谷 P1280 尼克的任务题解
  • 原文地址:https://www.cnblogs.com/YangqinCao/p/5980647.html
Copyright © 2020-2023  润新知