Я пытаюсь сделать директиву способной обрабатывать проверку <input type="file">
внутри <form>
, учитывая, что AngularJS не поддерживает это ... Это работает, чтобы проверить, выбран ли файл, ноУ меня также есть <textarea>
в форме, поэтому, когда я выбираю файл, форма получает состояние $ valid = true, но при вводе в <textarea>
форма становится $ valid = false, даже если я не установилпроверка для <textarea>
.Почему это происходит?Как я могу это исправить?Вот упрощенный пример, иллюстрирующий проблему:
Мой файл app.js:
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope) {
$scope.name = 'World';
});
app.directive('validFile', function () {
return {
restrict: "A",
require: '^form',
link: function (scope,elem,attrs, ctrl) {
elem.bind("change", function(e) {
console.log("change");
scope.$apply(function(){
ctrl.$valid=true;
ctrl.$invalid=false;
});
});
}
};
});
Мой файл index.html:
<!doctype html>
<html ng-app="plunker" >
<head>
<meta charset="utf-8">
<title>AngularJS Plunker</title>
<script>document.write('<base href="' + document.location + '" />');</script>
<link rel="stylesheet" href="style.css">
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.7.5/angular.js"></script>
<script src="app.js"></script>
</head>
<body ng-controller="MainCtrl">
<div ng-form="myForm" >
<input ng-model="filename" valid-file required type="file"/>
<button ng-disabled="myForm.$invalid" type="submit" class="btn btn-primary"><i class="icon-white icon-ok"></i> Ok</button>
<div >
<textarea name="observations" rows="3" cols="50" ng-model="observations"></textarea>
</div>
<p>
Input is valid: {{myForm.$valid}} Input is invalid: {{myForm.$invalid}}
<br>Selected file: {{filename}}
<br>Area is valid: {{myForm.observations.$valid}} Area is invalid: {{myForm.observations.$invalid}}
</p>
</div>
</body>
</html>
естьрабочий план того, что я только что сказал: http://plnkr.co/edit/k3KZpdX5q3pelWN21NVp?p=preview