これは、この問題を解決するために私が書いた軽量のディレクティブです。これは、イベントをアタッチする角度のある方法を反映しています。
次のようにディレクティブを使用できます。
HTML
<input type="file" file-change="yourHandler($event, files)" />
ご覧のとおり、$event オブジェクトを ng イベント ハンドラーに挿入するように、選択したファイルをイベント ハンドラーに挿入できます。
Javascript
angular
.module('yourModule')
.directive('fileChange', ['$parse', function($parse) {
return {
require: 'ngModel',
restrict: 'A',
link: function ($scope, element, attrs, ngModel) {
// Get the function provided in the file-change attribute.
// Note the attribute has become an angular expression,
// which is what we are parsing. The provided handler is
// wrapped up in an outer function (attrHandler) - we'll
// call the provided event handler inside the handler()
// function below.
var attrHandler = $parse(attrs['fileChange']);
// This is a wrapper handler which will be attached to the
// HTML change event.
var handler = function (e) {
$scope.$apply(function () {
// Execute the provided handler in the directive's scope.
// The files variable will be available for consumption
// by the event handler.
attrHandler($scope, { $event: e, files: e.target.files });
});
};
// Attach the handler to the HTML change event
element[0].addEventListener('change', handler, false);
}
};
}]);