Scope-subnetは入力がパターンに一致した後にのみ出力に表示されるため、スクリプト here とng-patternは正常に動作します。ただし、ng-showは、ng-patternが一致しない場合、エラーを表示しません
<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はそのscope
属性値のname
変数を作成し、name
属性を持つフォームのすべてのフォームフィールドを追加します。これらのフィールド属性変数は作成されますこのように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}/" >