$ scope的麻烦

时间:2013-11-10 10:20:37

标签: javascript forms validation angularjs

我在角度视图/表单中有一个输入文件元素。我正在使用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 字段。

我可以在这做什么?

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

1 个答案:

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

希望它会有所帮助。