この記事では、angularjs で繰り返されるパスワードを検証するための 2 つの方法を紹介します。具体的な方法の詳細は以下のとおりです:
最初の方法:
<label for="password">密码</label> <input id="password" name="password" type="password" ng-model="user.password" required> <label for="repassword">重复密码</label> <input id="repassword" name="repassword" type="password" ng-model="repassword" required> <span style="color:red" ng-show="user.password!=repassword">两次密码不一致</span> <input type="submit" class="btn btn-primary btn-lg" value="SAVE" ng-disabled="submit(userForm)"/> /*JS*/ app.controller("main",function($scope){ $scope.submit=function(ngFormController){ return ngFormController.$invalid; /*valid的取反*/ }; });
これは単純に 2 つの ng-model の値が等しいかどうかを判断するためです。等しくない場合は、 ng-show コマンドで制御された情報は表示されません。
しかし、この方法は非常に単純ですが、私がより深刻だと思う欠陥があります。この「パスワードの不一致」は ngFormController の内部には影響しません。つまり、ngFormController の $invalid では、パスワードが 2 回間違ってもエラーとはみなされないため、パスワードが 2 回間違っても、最後の送信ボタンはクリックできます。
AngularJSの命令ng-maxlengthなどを参照してくださいが、$invalid検出の原因になる可能性があるので、上記の問題を解決するには、2つのパスワードが一致しているかどうかを検証するカスタム命令を作成するのも方法の1つだと思います。
/*指令创建*/ app.directive('equals',function(){ return{ require:'ngModel', link:function(scope,elm,attrs,ngModelCtrl){ function validateEqual(myValue){ var valid = (myValue === scope.$eval(attrs.equals)); ngModelCtrl.$setValidity('equal',valid); return valid ? myValue : undefined; } ngModelCtrl.$parsers.push(validateEqual); ngModelCtrl.$formatters.push(validateEqual); scope.$watch(attrs.equals,function(){ ngModelCtrl.$setViewValue(ngModelCtrl.$viewValue); }) } } }); <!--html--> <label for="password">密码</label> <input id="password" name="password" type="password" ng-model="user.password" required> <label for="repassword">重复密码</label> <input id="repassword" name="repassword" type="password" ng-model="repassword" <!--注意这里将要使用我自定义的指令-->equals="user.password" required> <span style="color:red" ng-show="user.password!=repassword">两次密码不一致</span> <input type="submit" class="btn btn-primary btn-lg" value="SAVE" ng-disabled="submit(userForm)"/>
このように、最初の方法の判定と組み合わせることで、繰り返されるパスワードを完全に検証できます。