Another option would be to hide your images until they are loaded. You can do this by using a directive as an attribute (similar to how ng-cloak works but with added functionality). Your directive would look something like this, first hiding the element when angular compiles, and then showing it when the document is ready / images have loaded, etc.
angular.module('app').directive('fadeUpWhenReady', ['$document', function ($document) {
return {
restrict: 'A',
compile: function (element, attr) {
element.css({
"opacity": 0,
"-webkit-transform": "translateY(100px)",
"-moz-transform": "translateY(100px)",
"-o-transform": "translateY(100px)",
"-ms-transform": "translateY(100px)",
"transform": "translateY(100px)",
"-webkit-transition": "all 0.5s cubic-bezier(0.345, 0, 0.25, 1)",
"-moz-transition": "all 0.5s cubic-bezier(0.345, 0, 0.25, 1)",
"-o-transition": "all 0.5s cubic-bezier(0.345, 0, 0.25, 1)",
"-ms-transition": "all 0.5s cubic-bezier(0.345, 0, 0.25, 1)",
"transition": "all 0.5s cubic-bezier(0.345, 0, 0.25, 1)"
});
$document.ready( function() {
element.css({
"opacity": 1,
"-webkit-transform": "translateY(0)",
"-moz-transform": "translateY(0)",
"-o-transform": "translateY(0)",
"-ms-transform": "translateY(0)",
"transform": "translateY(0)"
});
});
}
};
}]);
Finally, you just use it as an attribute in an element you'd like to hide, for example:
<img ng-src = "{{ img.url }}" fade-up-when-ready />
Note that if your element is inside an ui-view, it'll compile twice. Once when the page initially loads, and a second time when the ui-view comes in the screen.