HTML:
<form name="form"> <input type="file" ng-model="document" valid-file required> <input type="submit" value="{{ !form.$valid && 'invalid' || 'valid' }}"> </form>
用于侦听输入[type = file]的自定义指令更改:
myApp.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(); }); }); } }; });
选择文件后,控制台中将显示以下错误:
错误:InvalidStateError:DOM异常11错误:试图使用一个不可用或不再可用的对象。
尝试使用plunkr:http ://plnkr.co/edit/C5j5e0JyMjt9vUopLDHc?p=preview
没有该指令,输入文件字段的状态将不会被推送到form。$ valid。为什么我会收到此错误以及如何解决此问题的任何想法?
从NgModelController。$ render()的引用
在需要更新视图时调用。 预期ng-model指令的用户将实现此方法。
您需要实现$ render()来调用它。你可以做这样的事情
myApp.directive('validFile', function () { return { require: 'ngModel', link: function (scope, el, attrs, ngModel) { ngModel.$render = function () { ngModel.$setViewValue(el.val()); }; el.bind('change', function () { scope.$apply(function () { ngModel.$render(); }); }); } }; });
**[DEMO](http://plnkr.co/edit/yya3vMoaTFiONU9wrFVw?p=preview)**