【发布时间】:2023-04-09 09:40:01
【问题描述】:
在我的 Angular 应用程序中,我实现了 this directive(下面的代码),它基本上允许我在 Angular 检测到 ajax 请求时显示我选择的元素。
但是,为了稍微提高可用性,我想仅在请求开始后经过一段时间(例如,100 或 200 毫秒)后才显示微调器,以避免在每个请求上出现不必要的瞬间显示.
实现这样的事情的最佳方式是什么?我无法让setTimeout 在if 块内正常播放,因为该元素永远不会再次隐藏,即使我不再有待处理的请求。
.directive('loading', ['$http' ,function ($http)
{
return {
restrict: 'A',
link: function (scope, elm, attrs)
{
scope.isLoading = function () {
return $http.pendingRequests.length > 0;
};
scope.$watch(scope.isLoading, function (v)
{
if(v){
elm.show();
} else {
elm.hide();
}
});
}
};
}]);
【问题讨论】:
-
请记住,Angular 有它自己的
$timeout功能,在大多数情况下你应该使用它而不是setTimeout。我的理解是$timeout等到摘要循环完成后再运行,而setTimeout不知道摘要循环。 -
你能解决这个问题吗?我的回答能否为您指明正确的方向?请尽可能分享您的发现
-
@scniro 会的。没有机会实际测试它,因为出现了其他一些事情,但我并没有忘记它。这似乎是正确的方法,实际上可能最终解决了我目前在项目中处理请求的方式的一些其他问题。非常感谢!
-
@Tiago 很酷,很高兴听到。请随时告诉我您的发现
-
你看看我的工厂怎么样angular-httpshooter,它可以让你更好地控制显示微调器或冻结用户界面,甚至阻止多个调用
标签: javascript angularjs ajax angularjs-directive