Angular 和 ajax 模板的预加载器
Angular and preloader for an ajax template
我有一个包含多个模板的仪表板。
在其中一个模板中,我有一个简单的列表。我在我的 li
上使用 ng-repeat
,这样我就可以保持我的列表动态。
但事情是这样的 -
由于我是使用 $http
获取此列表的数据,因此它很可能有一两秒为空列表。
一个很好的解决方案是默认为我的列表添加一个预加载器,但是您建议如何为此添加逻辑?最简单的方法是像这样添加它:
$http({
method: 'GET',
url: './data/websites.json'
}).then(function successCallback(response) {
// hide preloader, etc
});
这是正确的方法吗?
此外 - 是否可以控制模板转换?例如,当用户离开页面时,我想在 X 毫秒内显示预加载器,然后才移动到请求的页面
最好有一个指令为你做一切:
angular.module('directive.loading', [])
.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();
}
});
}
};
}]);
使用这个指令,您需要做的就是给任何加载动画元素一个 'loading' 属性:
<div class="loading-spiner-holder" data-loading ><div class="loading-spiner"><img src="..." /></div></div>
我有一个包含多个模板的仪表板。
在其中一个模板中,我有一个简单的列表。我在我的 li
上使用 ng-repeat
,这样我就可以保持我的列表动态。
但事情是这样的 -
由于我是使用 $http
获取此列表的数据,因此它很可能有一两秒为空列表。
一个很好的解决方案是默认为我的列表添加一个预加载器,但是您建议如何为此添加逻辑?最简单的方法是像这样添加它:
$http({
method: 'GET',
url: './data/websites.json'
}).then(function successCallback(response) {
// hide preloader, etc
});
这是正确的方法吗?
此外 - 是否可以控制模板转换?例如,当用户离开页面时,我想在 X 毫秒内显示预加载器,然后才移动到请求的页面
最好有一个指令为你做一切:
angular.module('directive.loading', [])
.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();
}
});
}
};
}]);
使用这个指令,您需要做的就是给任何加载动画元素一个 'loading' 属性:
<div class="loading-spiner-holder" data-loading ><div class="loading-spiner"><img src="..." /></div></div>