Atributo obrigatório Não está funcionando com input de arquivo em Angular Js

Eu tenho um controle de upload de arquivo no meu formulário.Estou usando o Angular JS. Quando coloco o atributo requerido para validar que o arquivo está selecionado, ele não está funcionando.

  

Você pode por favor sugerir porque o requerido não está funcionando?

É o ngModelController que faz a validação no Angular com base em atributos como require . No entanto, atualmente não há suporte para input type="file" com o serviço ng-model. Para fazê-lo funcionar, você poderia criar uma diretiva como esta:

 app.directive('validFile',function(){ return { require:'ngModel', link:function(scope,el,attrs,ngModel){ //change event is fired when file is selected el.bind('change',function(){ scope.$apply(function(){ ngModel.$setViewValue(el.val()); ngModel.$render(); }); }); } } }); 

Exemplo de marcação:

  

Input is valid: {{myForm.userUpload.$valid}}
Selected file: {{filename}}

Confira meu exemplo de trabalho plnkr .

Estendendo código @joakimbl vou sugerir o direto como este

 .directive('validFile',function(){ return { require:'ngModel', link:function(scope,el,attrs,ctrl){ ctrl.$setValidity('validFile', el.val() != ''); //change event is fired when file is selected el.bind('change',function(){ ctrl.$setValidity('validFile', el.val() != ''); scope.$apply(function(){ ctrl.$setViewValue(el.val()); ctrl.$render(); }); }); } } }) 

e em html você pode usar assim