检测所有图像何时加载到角度.js视图中
Detecting when all images have loaded in an Angular.js view
我有一个加载的视图,其中包含大量图像(通常在 100-200 之间),因此完全加载/渲染可能需要大约 5 秒,因此我想在此期间添加一个加载指示器。
我的问题是,我似乎找不到一种可靠的方法来知道何时显示视图并隐藏加载指示器。以前,我使用这段 [jQuery] 代码来实现这一点:
$(window).load(function() {
$('.loading-notice').fadeOut(300, function () {
$('.library-thumbnails').fadeIn(1000);
});
});
这很好用 - 但是在通过 Angular 加载视图时.js这似乎不可用。
我已经得到了我的 Angular.js 模板和控制器设置,可以像使用 jQuery 一样以相同的风格进行淡入淡出,但我只是无法检测到图像何时全部完成加载是全部 - 我似乎只能检测何时从将在模型中使用的服务器返回 JSON。
编辑我应该提到,我也尝试使用$viewContentLoaded如下,但是这是在图像完成加载之前调用的。
$scope.$on('$viewContentLoaded', function () {
console.log('$viewContentLoaded');
});
资源: ngLoading
我在Hack Actor的一位好朋友(Mason Hargrove)创建了一个名为ngLoad的Angular指令,你可以将其用于这样的目的。
以下是它的作用:
ngLoad将侦听从应用程序发出的任何http请求并显示动画,当应用程序收到http响应时,它将删除动画。
循序渐进
-
安装 ngLoad:
bower install ng-loading --save
-
将
ngLoading
作为依赖项注入主模块:angular.module('myApp', ['ngLoading']);
-
(可选)如果在
$http
请求完成后图像没有足够快地呈现到模板,则可以继续加载屏幕(hacky,可能没有必要):.controller('MyController', function(Interceptor, $timeout) { //trigger the loading screen to start Interceptor.start(); // Give the images time, 4 seconds, to render $timeout(Interceptor.end, 4000) });
结果
当图像从服务器加载时,加载程序图形将自动显示。当$http
请求完成时,它将停止。
进一步阅读
这里有一个关于 Angular 功能请求的有趣讨论,要求"一种检测 Angular 是否完成了 HTML DOM 渲染的方法"。他们通常建议使用$timeout
作为解决方法。
- Backbone.js视图中的多个模型
- 带有jquery插件的backbone.js视图
- 将js对象更改为使用嵌套的可观察数组敲除js视图模型
- Angular JS-视图不工作
- 为什么当我单击X时,所有项目都会从我的Backbone.js视图中删除
- 主干.js视图不会在页面加载时显示,但可以在控制台中与 jQuery 配合使用
- 单击'Backbone.js视图'不要工作
- 设置Sails js视图扩展不'不起作用
- 在 Node.js 视图中创建 OpenLayers 映射
- 支持使用Backbone.js视图加载异步模板
- Backbone.js视图可以有一个模型和一个集合吗
- backbone.js视图没有't由于异步获取而显示结果;t渲染
- 为什么我在尝试实例化一个空的backbone.js视图时出现类型错误
- 如何创建adonis.js视图
- Backbone.js视图未渲染
- Backbone js视图渲染点击方法未调用[Very Basic]
- 我可以't填充backbone.js视图
- 如何在anular.js视图中比较两个字符串
- 在Backbone.js视图中拖动gabilly.js事件
- 关于主干的困惑.js视图的渲染函数