programing

컨트롤러 내에서 $setValid 사용

yellowcard 2023. 3. 21. 21:51
반응형

컨트롤러 내에서 $setValid 사용

파일 변경에 대한 검증을 하려고 합니다.코드는 다음과 같습니다.

표시/템플릿

<input type="file" name="file" id="file"  
       onchange="angular.element(this).scope().setFile(this)" 
       required />

<span class="error" ng-show="myForm.file.$error.required">Error</span>
<span class="error" ng-show="myForm.file.$error.size">Selected file is too large</span>
<span class="error" ng-show="myForm.file.$error.filetype">Unsupported File type</span>

컨트롤러

angular.module("myapp").controller("myctrl", function($scope) {
  $scope.setFile = function(element) {
    $scope.$apply(function($scope) {
      var fileObject = element.files[0];
      $scope.file.fileType = 
         fileObject.type.toUpperCase().substring(fileObject.type.indexOf("/") + 1);

      // Validation
      if (!$scope.isValidFileType($scope.file.fileType)) {
        myForm.file.$setValidity("myForm.file.$error.filetype", false);
      }

      if (fileObject.size > 1000*1000*10) {
        myForm.file.$setValidity("myForm.file.$error.size", false);
      }
    });
  };

  $scope.isValidFileType = function(fileExtension) {
    var supportedExtensions = ["doc", "docx", "ppt", "pptx", "jpg", "gif", "png"]; // etc.
    return (jQuery.inArray(fileExtension, supportedExtensions) > -1);
  }
});

하지만 지금 당장은$setValidity동작하지 않습니다.
무슨 생각 있어?

다음 행:

myForm.file.$setValidity("myForm.file.$error.size", false);

그래야 한다

$scope.myForm.file.$setValidity("size", false);

ngModelController에서 $setValidity를 호출해야 합니다.관제사 안에서, 내 생각에 그것은$scope.myForm.file.$setValidity().

양식 페이지의 "사용자 정의 유효성 검사" 섹션을 참조하십시오.

또한 $setValidity의 첫 번째 인수에는 'filetype'과 'size'만 사용합니다.

단일 요소에 대한 여러 검증 메시지를 표시하는 더 나은 최적화 솔루션은 다음과 같습니다.

<div ng-messages="myForm.file.$error" ng-show="myForm.file.$touched">
 <span class="error" ng-message="required"> <your message> </span>
 <span class="error" ng-message="size"> <your message> </span>
 <span class="error" ng-message="filetype"> <your message> </span>
</div>

컨트롤러 코드는 @ Ben Lesh가 제안하는 코드여야 합니다.

언급URL : https://stackoverflow.com/questions/14363656/using-setvalidity-inside-a-controller

반응형