我最近开始在我的项目中使用AngularJS,并且我使用ngRepeat将动态数组中的缩略图加载到DIV中遇到了一个大问题。
由于我不会在这里解释整个应用程序,我将重现出现问题的孤立情况。
假设我有一个带有ngRepeat指令的图像标记,如下所示:
<img ng-repeat='n in [] | range: explorer.loadedLog.screenshotsNum' ng-src='getss.php?degenerated={{explorer.selectedLog}}&index={{n+1}}'>
假设range是一个自定义过滤器,它使用explorer.loadedLog.screenshotsNum(由AJAX请求修改的变量)元素生成数组,explorer.selectedLog是由AJAX请求修改的字符串。 我觉得这些信息几乎是不相关的,因为使用常见的动态数组测试它并遇到了同样的问题。
重点是:当 explorer.loadedLog.screenshotsNum 和 explorer.selectedLog 发生变化时,必须加载所有新图像。
我有一个用于更改这些值的按钮。当我第一次点击它(在第一次加载时),它没问题。如果我等待加载所有图像并再次更改这些值,则新图像仍然可以加载而没有任何问题。但是,如果我更改它并再次更改之前所有图片都已加载,它将加载 ALL 剩下的图像然后开始加载当前必须的图像加载。
我的意思是,我不知道我是否清楚地解释了这一点,但我想如果我修改了这些变量,&#34;旧的&#34; 图像就会停止加载。但是,不知何故,它们仍然在背景中加载,如 DOM ,那些仍然在文档中的某些地方,而&#34; new&#34;图像&#39;加载延迟。我其实想要阻止这个&#34; old&#34;加载图像并开始加载&#34; new&#34;图片。我认为这与ngRepeat的工作方式有关,但我真的很想知道是否有办法在不改变的情况下解决这个问题。
如果我能解决这个问题,那么ngRepeat选择对我来说是最好的。但我仍然接受任何其他建议。
修改
我刚刚注意到显而易见的事情:当你设置&#34; src&#34;,它会向服务器发出请求,即使你删除/更改它也不会停止img src ,所以它与 ngRepeat 的工作方式无关,但实际上与<img>
的工作方式有关。因此,根据我的需要, window.stop()完成了这项工作(因为我的应用程序对此没有任何限制),但我仍然想知道如果同时加载在页面上的任何其他图像,因为我无法简单地调用window.stop()。有一种方法可以防止加载<img>
,因此我可以迭代容器内的所有<img>
元素,阻止它们逐个加载?
答案 0 :(得分:0)
您是否可以修改getss.php
并将HTTP缓存标头添加到响应中?在设置src
属性时,它不会更改尝试获取图像的浏览器,但它会从浏览器缓存中获取图像。