angularjs ng在显示div时显示延迟

angularjs ng在显示div时显示延迟,angularjs,onchange,ng-show,Angularjs,Onchange,Ng Show,我是个新手。我有一个文件输入 <input type="file" id="sampleFile" onchange="angular.element(this).scope().vm.displaySelectedXml()" /> 因此,当选择一个文件时(与前一个或第一个文件不同),onchange应该触发并调用上面的fn,它将标志设置为true,然后显示div的内容 问题是div显示大约需要30到60秒。当我在上面的函数中设置断点并选择一个文件时,就会立即调用该函数。我选择的

我是个新手。我有一个文件输入

<input type="file" id="sampleFile" onchange="angular.element(this).scope().vm.displaySelectedXml()" />
因此,当选择一个文件时(与前一个或第一个文件不同),onchange应该触发并调用上面的fn,它将标志设置为true,然后显示div的内容


问题是div显示大约需要30到60秒。当我在上面的函数中设置断点并选择一个文件时,就会立即调用该函数。我选择的文件小于1k,因此非常小。看来延迟发生在角层的某个地方。会是这样吗?有人知道为什么会这样吗?提前谢谢。这在IE和Chrome中都会发生

这里的问题是您从外部更改了angular无法识别的范围变量。更改将仅在下一个diggest循环中应用。您可以通过添加
$scope.$apply
来解决此问题:

onchange="var scope = angular.element(this).scope(); scope.vm.displaySelectedXml(); scope.$apply()"

实现相同效果的更干净的方法:

<input type="file" id="sampleFile" ng-change="vm.displaySelectedXml()">


你能提供一把小提琴让我们重现这种行为吗?@Tom ng change不支持文件输入:你需要在进行更改后应用作用域
$scope.$apply()
@pankajparkar就是这样。我把它给了努米克斯,因为他给了我一个恰当的答案。效果很好。非常感谢。
onchange="var scope = angular.element(this).scope(); scope.vm.displaySelectedXml(); scope.$apply()"
<input type="file" id="sampleFile" ng-change="vm.displaySelectedXml()">