AngularJS - Image "onload" Event
Answer :
Here's a re-usable directive in the style of angular's inbuilt event handling directives:
angular.module('sbLoad', []) .directive('sbLoad', ['$parse', function ($parse) { return { restrict: 'A', link: function (scope, elem, attrs) { var fn = $parse(attrs.sbLoad); elem.on('load', function (event) { scope.$apply(function() { fn(scope, { $event: event }); }); }); } }; }]);
When the img load event is fired the expression in the sb-load attribute is evaluated in the current scope along with the load event, passed in as $event. Here's how to use it:
HTML
<div ng-controller="MyCtrl"> <img sb-load="onImgLoad($event)"> </div>
JS
.controller("MyCtrl", function($scope){ // ... $scope.onImgLoad = function (event) { // ... }
Note: "sb" is just the prefix I use for my custom directives.
Ok, jqLite' bind
method doing well its job. It goes like this:
We are adding directive' name as attribute in our img
tag . In my case , after loading and depending on its dimensions , image have to change its class name from "horizontal" to "vertical" , so directive's name will be "orientable" :
<img ng-src="image_path.jpg" class="horizontal" orientable />
And then we are creating simple directive like this:
var app = angular.module('myApp',[]); app.directive('orientable', function () { return { link: function(scope, element, attrs) { element.bind("load" , function(e){ // success, "onload" catched // now we can do specific stuff: if(this.naturalHeight > this.naturalWidth){ this.className = "vertical"; } }); } } });
Example (explicit graphics!): http://jsfiddle.net/5nZYZ/63/
AngularJS V1.7.3 Added the ng-on-xxx
directive:
<div ng-controller="MyCtrl"> <img ng-on-load="onImgLoad($event)"> </div>
AngularJS provides specific directives for many events, such as ngClick
, so in most cases it is not necessary to use ngOn
. However, AngularJS does not support all events and new events might be introduced in later DOM standards.
For more information, see AngularJS ng-on Directive API Reference.
Comments
Post a Comment