When I change a query-parameter in my controller, it causes
willTransition to fire in the corresponding route. However, say I want to abort that transition by calling
transition.abort() in the
willTransition method. After calling
willTransition method is fired again - so if I always call
abort(), this causes an infinite loop.
Is there a way to abort the transition in which
willTransition will not keep firing?
I looked in the source code and found out why this was happening, but haven’t found a solution for it. Even though I call
transition.abort(), in the source code the function
getTransitionByIntent looks to see if the query-params have changed, and if they do it sets off the process of calling
willTransition. So essentially
transition.abort() does not reset the query params.
Here’s some extra info that might be too much information, so I’m putting this at the bottom:
I can’t even do something hacky where I manually reset the query-params on the transition object myself, because what happens in
getTransitionByIntent is that the method creates an internal variable called
queryParamsChangedList, then it sets off a chain reaction in which it calls
willTransition, there is no way for me to have access to the
queryParamsChangedList variable. After this chain reaction is done, and we are back in
getTransitionByIntent, and it calls
fireQueryParamDidChange, in which it sets off another chain reaciton in which
getTransitionByIntent is called again. And because I tried to abort the transition, the method thinks the query params are still out of sync, so the
queryParamsChangedList is never empty.