A workaround for ng-change in angular js which does not catch file input change event.

view.html:

<input type="file" custom-on-change="uploadFile">

controller.js:

app.controller('myCtrl', function($scope){
$scope.uploadFile = function(event){
var files = event.target.files;
};
}); 

directive.js:

app.directive('customOnChange', function() {
return {
restrict: 'A',
link: function (scope, element, attrs) {
var onChangeHandler = scope.$eval(attrs.customOnChange);
element.bind('change', onChangeHandler);
}
};
});

Source: http://stackoverflow.com/a/19647381/888278