0

我在角度视图/表单中有一个输入文件元素。我正在像这样使用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() 记录 - 它显示的范围与我在视图上实际看到的范围不同。

如果我稍后通过更改常规输入字段(“其他”)来触发 ng-change,它会获取更改,或者实际上,它会正确设置提交按钮状态。

现在,我怀疑这与我从表单中调用angular.element(this).scope().setFile(this)而不是直接的 $scope-bound 方法有关。但是我不能调用 $scope-bound 方法,因为它不会触发 - 如果我理解正确,那是因为 Angular 没有(还)使用输入类型 = 文件字段。

我可以在这里做什么?

我只是想检测是否有文件,以便我可以适当地启用/禁用提交按钮。

4

1 回答 1

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;
            });   
        }
    }

希望它会有所帮助。

于 2013-11-10T10:54:36.003 回答