javascript - AngularJs表单验证自定义指令为什么不起作用呢?
巴扎黑
巴扎黑 2017-04-11 11:21:25
[JavaScript讨论组]

刚开始学习AngularJs,尝试写表单验证,自己自定义一个验证确认密码的指令怎么不起作用?

代码如下:

angular.module('myApp',[])
   .controller('SignUpController',function($scope){
     $scope.userdata = {};
     $scope.submitForm = function() {
           console.log($scope.userdata);
          if($scope.signUpForm.$invalid){
            alert("请填写完信息");
          }else {
             alert("注册成功");
         }
      };
   })
   .directive('confirm-pwd',function(){
     console.log($scope.userdata.password1);
       return {
           require:'ngModel',
           restrict:'AE',//匹配模式 A属性
           scope:{orgTxt: '=confirmPwd'},
           link: function(sco,ele,att,con) {
               con.validators.confirmPwd = function(v) {
                   return  v === sco.orgTxt;
               };
               sco.watch('orgTxt',function() {
                   con.validate();
               });
           }
       };
   });
   

html部分代码如下:

用户名长度应在2到4个字符之间

密码长度应该在4-12位之间

合法:{{signUpForm.password1.$invalid}}
{{userdata.password1}}

两次输入密码不一致

巴扎黑
巴扎黑

全部回复(2)
阿神

1.把$加上

link: function(sco, ele, att, con) {
                        console.log(con);
                        con.$validators.confirmPwd = function(v) {
                            return v === sco.orgTxt;
                        };
                        sco.$watch('orgTxt', function() {
                            con.$validate();
                        });

2..directive('confirmPwd'....定义用驼峰,调用用连字符confirm-pwd="userdata.password"
3.不知道ng-appng-controller加了没 因为没贴。
最后合法的逻辑好像有点问题。密码不一致合法会提示true,一致提示false,其他功能正常。

大家讲道理

最终正确的是:

angular.module('myApp',[])

   .controller('SignUpController',function($scope){
     $scope.userdata = {};
     $scope.submitForm = function() {
           console.log($scope.userdata);
          if($scope.signUpForm.$invalid){
            alert("请填写完信息");
          }else {
             alert("注册成功");
         }
      };
   })
   .directive('confirmPwd',function(){ //指令定义用驼峰法
       return {
           require:'ngModel',
           restrict:'AE',//匹配模式 A属性
           scope:{orgTxt: '=confirmPwd'},
           link: function(sco,ele,att,con) {
               con.$validators.confirmPwd = function(v) {
                   return  v === sco.orgTxt;
               };
               sco.$watch('orgTxt',function() {
                   con.$validate();
               });
           }
       };
   });
   
      <body ng-app="myApp" ng-controller="SignUpController">
   <form name="signUpForm" ng-submit="submitForm()" novalidate>
    <p class="form-group">
        <label>名称</label>
        <input type="text"
               class="form-control"
               autofocus="autofocus"
               name = "username"
               ng-model = "userdata.username"
               ng-minlength = "2"
               ng-maxlength = "6"
               required
               id="name1">
       <p ng-if="(signUpForm.username.$error.minlength ||
           signUpForm.username.$error.maxlength)&& signUpForm.username.$dirty">
            用户名长度应在2到4个字符之间</p>
    </p>

    <p class="form-group">
        <label>密码</label>
        <input type="password"
               class="form-control"
               name="password"
               ng-model="userdata.password"
               ng-minlength="4"
               ng-maxlength="12"
             required>
   <p ng-if="(signUpForm.password.$error.minlength||
                signUpForm.passsword.$error.maxlength)&&
                signUpForm.password.$dirty">
            密码长度应该在4-12位之间</p>

    </p>
    <p class="form-group">
        <label>确认密码</label>
        <input type="password"
               class="form-control"
               name="password1"
               ng-model="userdata.password1"
               confirm-pwd="userdata.password"
               required>
        <p ng-if="signUpForm.password1.$error.confirmPwd &&
             signUpForm.password1.$dirty">两次输入密码不一致</p>
    </p>
    <button  type="submit" class="btn" id="valite">验证</button>
  </form>
  <script src="../lib/angular-1.6.1/angular.min.js"></script>
  <script src="../js/HelloAngular.js"></script>    
   
   
   
   
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号