Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 指令中的angularjs$setValidity未更新_Javascript_Angularjs_Validation - Fatal编程技术网

Javascript 指令中的angularjs$setValidity未更新

Javascript 指令中的angularjs$setValidity未更新,javascript,angularjs,validation,Javascript,Angularjs,Validation,我正试图根据我看到的一个示例构建一个自定义指令,以确保确认密码是正确的。 我在$setValidity标记上遇到了一些问题,尽管我的所有console.log都会执行并打印出来,但似乎没有更新有效性。即使在控制台中读取设置为false时,Pass也保持为true。 我确保名称和ng模型是相同的,我也尝试使用scope.$apply,但结果会出现一个错误,即当应用其他内容时,我正在尝试应用 这是我的密码: HTML 如果您在同一元素上使用指令&在require中使用ng模型,则无需在confirm

我正试图根据我看到的一个示例构建一个自定义指令,以确保确认密码是正确的。 我在$setValidity标记上遇到了一些问题,尽管我的所有console.log都会执行并打印出来,但似乎没有更新有效性。即使在控制台中读取设置为false时,Pass也保持为true。 我确保名称和ng模型是相同的,我也尝试使用scope.$apply,但结果会出现一个错误,即当应用其他内容时,我正在尝试应用

这是我的密码: HTML


如果您在同一元素上使用指令&在require中使用ng模型,则无需在confirm上使用$watch。所以你的代码可以

ctrl.$parsers.unshift(valid);
ctrl.$formatters.unshift(valid);

function valid(viewValue){
    console.log(viewValue);
    console.log(scope.pnew);
      if(viewValue==scope.pnew){
        console.log("success!");
        ctrl.$setValidity('pass', true);
        return viewValue;
      }
      else {
        console.log("set to false");
        ctrl.$setValidity('pass', false);
        return undefined;
      }
}
最简单的例子是plunk

谢谢,我遵循了你的解决方案,而且我更改了代码,只得到了一个像你一样的返回,而{{profileForm.confirm.$valid}似乎有效,{{{profileForm.confrim.$error.pass}没有。实际上,这段时间我的ng显示是错误的,现在它工作了。。。。谢谢
.directive('pwcheck', function() {   
  return {
    require: 'ngModel',
    link: function(scope, elm, attrs, ctrl) {
      function valid(value){
          scope.$watch("confirm", function(newval, oldval){
            console.log(value);
            console.log(scope.pnew);
              if(value==scope.pnew){
                console.log("success!");
                ctrl.$setValidity('pass', true);
                return value;
              }
              else {
                console.log("set to false");
                ctrl.$setValidity('pass', false);
                return undefined;
              }

          });
      }
      ctrl.$parsers.push(valid);
    }   } });
ctrl.$parsers.unshift(valid);
ctrl.$formatters.unshift(valid);

function valid(viewValue){
    console.log(viewValue);
    console.log(scope.pnew);
      if(viewValue==scope.pnew){
        console.log("success!");
        ctrl.$setValidity('pass', true);
        return viewValue;
      }
      else {
        console.log("set to false");
        ctrl.$setValidity('pass', false);
        return undefined;
      }
}