varios sintaxis que otro modulos llamar funcion entre controladores controlador conectar comunicar comunicacion componentes javascript angularjs angularjs-controller angularjs-forms

javascript - sintaxis - ng controller que es



Usando $ setValidity dentro de un controlador (3)

$ setValidity necesita ser llamado en ngModelController. Dentro del controlador, creo que eso significa $scope.myForm.file.$setValidity() .

Consulte también la sección "Validación personalizada" en la página Formularios , si aún no lo ha hecho.

Además, para el primer argumento de $ setValidity, use simplemente ''filetype'' y ''size''.

Estoy intentando hacer una validación sobre el cambio de archivo. Aquí está mi código:

Ver / Plantilla

<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>

Controlador

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); } });

Pero en este momento la llamada a $setValidity no está funcionando.
¿Alguna idea?


Esta línea:

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

Debiera ser

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


Una solución mejor y optimizada para mostrar múltiples mensajes de validación para un solo elemento sería así.

<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>

El código del controlador debe ser el sugerido por @ Ben Lesh