4

I'm getting the error

[$rootScope:inprog] $apply already in progress

whenever I trigger a click event on a hidden file upload input.

HTML:

<!-- button that calls function in controller -->
<button type="button" ng-click="uploadClicked()">Upload</button>
<!-- Upload input I'm triggering the click event on -->
<input type="file" accept="image/*" id="profile-photo" name="profile-photo" ng-hide="true"/>

AngularJS function in controller:

$scope.uploadClicked = function () {
    //Causes Error: [$rootScope:inprog] $apply already in progress and opens file dialog
    document.getElementById('profile-photo').click();

    //Causes Error: [$rootScope:inprog] $apply already in progress and does not open file dialog
    $('#profile-photo').trigger('click');
};

I'm not calling $apply or $digest anywhere in my controller. Why would this error be occurring?

4
  • Because angularjs does some actions in the background and your tiggered click conflicts at that place. Commented Jan 3, 2015 at 11:11
  • That's rather unfortunate. Any advice on how to circumvent this? Commented Jan 3, 2015 at 11:12
  • Try wrapping it in a $timeout Commented Jan 3, 2015 at 11:18
  • @justine have you had any luck with this ?I am facing the same issue.I am manually clicking on a hidden link for downloading and this error is thrown then.Please update Commented Mar 3, 2015 at 9:51

1 Answer 1

4

I just got a similar issue and i was able to fix that by wrapping the place where we click with a

 setTimeout(function(){uploadClicked();},0);

the angular version would be

$timeout(function(){uploadClicked();},0);

By using angular version, Angular will be aware and will not initialize another digest cycle on finding a click event.

Sign up to request clarification or add additional context in comments.

2 Comments

It should be setTimeout, not setTimeOut (no capital O).
Actually, it would be $timeout(function() { uploadClicked(); }) these days

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.