首次上传后 ng-change 不起作用

ng-change not working after first upload

http://embed.plnkr.co/keaGc3Y4Pmgfs04HJgnC/

这是我的 code.I 的 link 我正在尝试通过在文件为空时禁用加载数据按钮来验证我的上传。 它是第一次工作,但是当我下次上传文件时,ng-change 不工作并且按钮仍然显示禁用,尽管我已经上传了下一个文件。 我是 AngularJS 的初学者,所以我可能会做一些基本的 mistake.please 帮助。

Please change, initially

vm.foo = 'Monthly'

<input type="radio" name="{{item.deviceId}}" ng-model="renew.foo" ng-value="'Monthly'" ng-click="renew.updatePref(item, 'Monthly')">Monthly
<input type="radio"  name="{{item.deviceId}}" ng-model="renew.bar" ng-value="'Yearly'" ng-click="renew.updatePref(item, 'Yearly')">Yearly
you have use ng-change, change event never happen as value for these input remains always same. use,

var vm = this;
you are also using ng-value="Monthly", Monthly is variable (undefiend) for ng-value. either use value="Monthly" or ng-value="'Monthly'".

由于您试图再次上传同一个文件,onChange 事件将不会触发,因为它是同一个文件。要解决此问题,您需要在上传文件后取消设置输入字段。不幸的是,您必须为此使用 jQuery (或使用 vanilla js 获取元素)。所以,在你的 onFileLoad 函数中你可以做这样的事情:

angular.element("input[type='file']").val(null); // Unset Input
$scope.filename = undefined; // Unset $scope property

请注意,这不是 "angular" 执行此操作的方法。最好将其移动到指令中,因为您不应该在 Controller 中操作 DOM。

更新: 如前所述,您需要包含 jQuery 才能正常工作。 Angular 的 jqLit​​e 不支持通过其 type 选择 DOM 元素。因此,要么包含 jQuery(需要在 angular 之前加载!),要么修改代码以便可以使用 vanilla JS 或 jqlite。