AngularJS - 显示/隐藏加载器
AngularJS - Show / Hide Loader
>关于angularJS中"scope"的问题我尝试在进行搜索时显示加载动画。
在我的控制器中,我创建了一个名为"加载器"的变量在 HTML 中,我将 ng-show="loader" 放在我想显示/隐藏的div 上
简单。。。但。。。
我可以显示加载器,但无法隐藏它...
这是我的代码...
.HTML:
<secion ng-controller="ContactsCtrl">
<div class="loader" ng-show="loading"></div>
<h2>Contacts</h2>
<form class="form-search">
<input type="text" ng-model="s_search" placeholder="Search for a contact...">
<button type="submit" class="btn" ng-click="search()">Search</button>
</form>
<div id="resultContact"></div>
</section>
.JS:
function ContactsCtrl($scope){
$scope.loading = false;
$scope.endLoading = function(){
$scope.loading = false;
}
$scope.search = function() {
$scope.loading = true;
setTimeout($scope.endLoading, 1000);
}
}
我想问题出在"范围继承"上,但我没有看到我的错误
每当在 Angular 之外调用 Angular 时,都需要调用 $scope.$apply()
(例如 jQuery 事件处理程序或此处的 setTimeout()
)。但最好的方法是使用 Angular 服务,$timeout
(文档)执行相同的工作并调用 $apply
.
setTimeout 不在 Angular 的摘要周期之内。您需要使用$timeout来提醒有关您的函数的角度。
function ContactsCtrl($scope, $timeout){
$scope.loading = false;
$scope.endLoading = function(){
$scope.loading = false;
}
$scope.search = function() {
$scope.loading = true;
$timeout($scope.endLoading, 1000);
}
}
我想指出的是,您似乎正在执行某种"加载",这意味着使用$http或其他数据查找。您可以将函数绑定到完成事件,或对更改的数据设置观察程序,而不是设置计时器。
例如:
$scope.$watch("searchData", function () {
$scope.loading = false;
}, true);
$scope.$search = function () {
$scope.loading = true;
$http.get("/searchUrl", function (res) {
$scope.searchData = res;
});
});
相关文章:
- Bootstrap在页面加载缓慢时会立即显示隐藏的模式对话框
- 在第一页加载时隐藏字段,而不是在php发布之后
- 隐藏元素直到加载完成(ng斗篷不是我需要的)
- 显示/隐藏将不会加载
- 如何在网页加载时显示加载内容,并在页面完全加载时隐藏此内容
- 谷歌地图加载后隐藏加载图像
- ng高图表的响应行为,加载时隐藏编译的ng点击xAxis标签
- 如何在应用切换点击功能之前,默认情况下在页面加载时隐藏带有特定类的ul-li
- 使用Boostrap懒惰加载隐藏内容
- 如何在页面加载时加载隐藏分区的JS内容
- 花式框 - 不加载隐藏的图像
- 如何获得一个链接来加载隐藏溢出并在悬停时显示完整内容
- 响应式JavaScript – 加载/隐藏与浏览器宽度相关的特定功能
- 使用 c# 获取加载隐藏字段值
- 加载隐藏的图像到HTML
- 当通过页面加载隐藏标签时,标签不显示
- 剑道UI模板加载隐藏元素
- JS/CSS:从HTML文件中预加载隐藏的图像
- Jquery加载隐藏时,图像被加载
- 在AngularJS中,如何加载隐藏元素的页面