我在角度视图/表单中有一个输入文件元素。我正在使用ng-upload这样:
<input id="img" type="file" name="image" onchange="angular.element(this).scope().setFile(this)">
<input id="imgname" type="hidden" value=""></div>
由于我无法告诉angular监听input[type="file"]
元素的更改,因此我创建了更新隐藏输入的方法,该隐藏输入只保存当前文件名。这样我就可以在第二个字段上运行我的验证器。
我拥有的另一个领域有某种验证器,如下所示:
<input ng-model="other" ng-change="chg()"/>
现在,问题是,如果我从$scope.chg()
方法触发验证器setFile()
,我认为我没有获得相同的范围 - chg()
运行,但它是如果验证器在另一个范围内,并且未将我的实际提交按钮设置为启用。我尝试从chg()进行日志记录 - 它显示的是与我在视图中实际看到的不同的范围。
如果我稍后通过更改常规输入字段(“other”)来触发ng-change,它会接收更改,或者实际上,它会正确设置提交按钮状态。
现在,我怀疑这与我从我的表单调用 angular.element(this).scope()。setFile(this)而不是直接的$ scope-bound方法有关。但是我不能调用$ scope-bound方法,因为它没有触发 - 如果我理解正确,那是因为Angular没有(还)使用 input type = file 字段。
我可以在这做什么?
我只是想检测是否有文件,所以我可以适当地启用/禁用提交按钮。
答案 0 :(得分:1)
我使用了跟随流程对我有用:
<input type="file"
ng-model="upFile"
onchange="angular.element(this).scope().setFileEventListener(this)"
/>
来自控制器:
$scope.setFileEventListener = function(element) {
$scope.uploadedFile = element.files[0];
if ($scope.uploadedFile) {
$scope.$apply(function() {
$scope.upload_button_state = true;
});
}
}
希望它会有所帮助。