angular の組み込みイベント処理ディレクティブのスタイルで再利用可能なディレクティブを次に示します。
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 });
});
});
}
};
}]);
img load イベントが発生すると、sb-load 属性の式が現在のスコープで評価され、load イベントが $event として渡されます。使用方法は次のとおりです。
HTML
<div ng-controller="MyCtrl">
<img sb-load="onImgLoad($event)">
</div>
JS
.controller("MyCtrl", function($scope){
// ...
$scope.onImgLoad = function (event) {
// ...
}
注: 「sb」は、カスタム ディレクティブに使用するプレフィックスです。