80

ファイルの変更について検証を試みています。これが私のコードです:

ビュー/テンプレート

<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は機能していません。
何かご意見は?

4

3 に答える 3

131

この行:

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

する必要があります

$scope.myForm.file.$setValidity("size", false);
于 2013-01-16T19:38:00.483 に答える
17

$setValidity は ngModelController で呼び出す必要があります。コントローラーの中では、 という意味だと思います$scope.myForm.file.$setValidity()

フォーム ページの「カスタム検証」セクションも参照してください。

また、$setValidity の最初の引数には、'filetype' と 'size' のみを使用します。

于 2013-01-16T19:37:07.323 に答える