You are getting this error because you are calling $apply inside an existing digestion cycle.
The big question is: why are you calling $apply? You shouldn’t ever need to call $apply unless you are interfacing from a non-Angular event. The existence of $apply usually means I am doing something wrong (unless, again, the $apply happens from a non-Angular event).
If $apply really is appropriate here, consider using a “safe apply” approach:
https://coderwall.com/p/ngisma