Angular\'s ng-src keeps previous model until it preloads image internally. I am using different image for the banner on each page, when I switch routes, i change main view,
Instead of using
element.on('load', function() {});
use imagesLoaded plugin. It will speed up dramatically your images.
So the final code would be:
link: function(scope, element) { imagesLoaded(element, function() { }); scope.$watch('ngSrc', function() { }); }