Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript $apply在onchange调用中不起作用_Javascript_Angularjs_Html - Fatal编程技术网

Javascript $apply在onchange调用中不起作用

Javascript $apply在onchange调用中不起作用,javascript,angularjs,html,Javascript,Angularjs,Html,我有一个文件上传工作,并试图添加一个微调器图标,以显示该文件正在被放入内存。“表单保存/提交”按钮将被禁用,直到文件完全存储在内存中。现在我有旋转器工作,但它打破了我的按钮 以前的HTML: <div class="form-group"> <label class="col-xs-12 col-sm-4">Image <span class="required_field">*</span>:</label> <

我有一个文件上传工作,并试图添加一个微调器图标,以显示该文件正在被放入内存。“表单保存/提交”按钮将被禁用,直到文件完全存储在内存中。现在我有旋转器工作,但它打破了我的按钮

以前的HTML:

<div class="form-group">
    <label class="col-xs-12 col-sm-4">Image <span class="required_field">*</span>:</label>
    <input class="input-dnld" id="loadImg" type='file' placeholder="Select an image to upload" name="topoImg" onchange="angular.element(this).scope().readimg(this)" accept="image/*" required>
    <label for="loadImg" required><span class="glyphicon glyphicon-open glyph-style"></span>Select an image to upload</label>
</div>

...

<button ng-click="saveTopo()" ng-disabled="frmNode.$invalid || !image" class="btn btn-default action_btn_style">Save</button>
当前JS功能:

$scope.readimg = function(ele) {
    $scope.image = ele.files[0];
}
 $scope.readimg = function(ele) {
    $scope.imgupload = true;
    $scope.$apply();
    $scope.image = ele.files[0];
    $scope.imgupload = false;
    $scope.$apply();
} 

我添加了$apply和一个布尔变量来显示图像正在上传。在添加$apply之前,函数中的布尔值直到函数返回后才被更改。添加$apply后,会显示微调器,但该按钮在微调器消失之前很久就已启用。我试图用布尔值修改condition语句,但它似乎没有更新。由于angularjs中缺少对文件类型字段的ng更改支持,而我是web开发的初学者,因此我正在琢磨如何使这一更改生效

调用函数时,按钮不会立即启用,因为if语句中有imgupload。这是一个奇怪的设置,理想的做法是为此创建一个指令。如何使其工作,可以在中添加setTimeout和execute$scope.$apply()it@sebenalern你是说ng残疾人领域吗?我不知道如何启用它。@DayanMorenoLeon我想看一个示例指令。我已经研究了角度模块,但还没有找到一个适合我需要的。如果有更好的方法,请让我知道。创建一个限制为的指令,使其隔离作用域。将内部函数附加到onChange事件处理程序。公开onStart和onFinish事件,然后从指令中执行这些函数,以通知当前范围的上载状态
 $scope.readimg = function(ele) {
    $scope.imgupload = true;
    $scope.$apply();
    $scope.image = ele.files[0];
    $scope.imgupload = false;
    $scope.$apply();
}