angularjs ng-show 延迟显示 div
angularjs ng-show delay in showing div
我是 Angular 的新手。我有一个文件输入
<input type="file" id="sampleFile" onchange="angular.element(this).scope().vm.displaySelectedXml()" />
下面有一个 div:
<div ng-hide="!vm.displayXml">
<div> xml file display goes here </div>
</div>
我从 here 获得了 onchange 事件处理程序。
我的控制器js有以下功能:
function displaySelectedXml() {
vm.displayXml = true;
}
因此,当一个文件被 selected(不同于前一个或第一个文件)时,onchange 应该触发并调用上面的 fn,它将标志设置为 true,然后应该显示div.
的内容
问题是 div 需要大约 30 到 60 秒才能显示。当我在上面的函数和 select 文件中设置断点时,会立即调用该函数。我select的文件不到1k,所以很小。似乎延迟发生在 Angular 层的某处。会是这样吗?有人知道为什么会这样吗?提前致谢。这在 IE 和 Chrome 中都会发生。
这里的问题是您从外部更改了范围变量,angular 无法识别。更改只会在下一个摘要周期中应用。您可以通过添加 $scope.$apply
:
来解决此问题
onchange="var scope = angular.element(this).scope(); scope.vm.displaySelectedXml(); scope.$apply()"
实现相同效果的更简洁的方法:
<input type="file" id="sampleFile" ng-change="vm.displaySelectedXml()">
我是 Angular 的新手。我有一个文件输入
<input type="file" id="sampleFile" onchange="angular.element(this).scope().vm.displaySelectedXml()" />
下面有一个 div:
<div ng-hide="!vm.displayXml">
<div> xml file display goes here </div>
</div>
我从 here 获得了 onchange 事件处理程序。
我的控制器js有以下功能:
function displaySelectedXml() {
vm.displayXml = true;
}
因此,当一个文件被 selected(不同于前一个或第一个文件)时,onchange 应该触发并调用上面的 fn,它将标志设置为 true,然后应该显示div.
的内容问题是 div 需要大约 30 到 60 秒才能显示。当我在上面的函数和 select 文件中设置断点时,会立即调用该函数。我select的文件不到1k,所以很小。似乎延迟发生在 Angular 层的某处。会是这样吗?有人知道为什么会这样吗?提前致谢。这在 IE 和 Chrome 中都会发生。
这里的问题是您从外部更改了范围变量,angular 无法识别。更改只会在下一个摘要周期中应用。您可以通过添加 $scope.$apply
:
onchange="var scope = angular.element(this).scope(); scope.vm.displaySelectedXml(); scope.$apply()"
实现相同效果的更简洁的方法:
<input type="file" id="sampleFile" ng-change="vm.displaySelectedXml()">