javascript - ng-pattern 不显示 $error.pattern

标签 javascript angularjs forms validation angularjs-forms

我有脚本 here并且 ng-pattern 工作正常,因为 scope.subnet 仅在输入匹配模式后才显示在输出中。但是如果 ng-pattern 不匹配,ng-show 不会显示任何错误

<body ng-contoller="myConfigGenCtr">
  <form novalidate name="myForm">
            <div class="form-group">
                <label for="hostname">Firewall hostname</label>
                <input type="text" ng-model="hostname" class="form-control" id="hostname">
            </div>
            <div class="form-group">
                <label for="subnet">Firewall subnet</label>
                <input type="text" ng-model="subnet" class="form-control" id="subnet"
                       required ng-pattern="/^(?:[0-9]{1,3}\.){3}/" >
                <div class="custom-error"  ng-show="myForm.subnet.$error.pattern">
                    Not a valid subnet, should be i.e. 10.x.y. (3 bytes only)</div>
            </div>
        </form>
  <div>Output: {{subnet}}</div>      
</body>

最佳答案

当您添加带有名称的表单标签时,angular 会为该 name 属性值创建一个 scope 变量,并添加具有 名称属性。这些字段属性变量在表单范围对象中创建。像这里一样,您使用的是 myForm,这意味着 $scope.myFrom 具有有关表单字段的所有信息。例如使用 $valid$invalid$error 等的有效性。

在这里,您在表单的 subnet 元素上使用 ng-show="myForm.subnet.$error.pattern"。您错过了在输入字段上添加 name="subnet" 属性,结果是 subnet 元素验证在 myForm 范围变量中不可用.

标记

<input type="text" name="subnet" ng-model="subnet" class="form-control" 
id="subnet" required ng-pattern="/^(?:[0-9]{1,3}\.){3}/" >

Working Plunkr

关于javascript - ng-pattern 不显示 $error.pattern,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31995684/

相关文章:

javascript - 使用 ng-pattern 进行验证是否违反关注点分离?

css - 如何使用 Ruby 为彼此相邻的表单设置样式

python - 将表单数据保存到数据库并将其发送到API; Django

JavaScript:是否可以处理来自 `form.submit()` 的服务器错误?

javascript - JSON解析字符串文字中的双引号

javascript - 将部分类名替换为按钮 onclick 的值

javascript - Angular 只读范围行为很奇怪

javascript - 响应问题jquery点击 slider

javascript - 如何定位动态内容,使其他内容不移动

javascript - 如何从 View 中的域名中删除 "http://"