fix infinite loop when scrolling end #278
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The problem has been stated in issue #186 , I found out the infinite loop will occur when using AJAX calls to retrieve data which normally requires the use of
infinite-scroll-disabled
. When its value switches from true to false, it will trigger scroll function again ifcheckWhenEnabled
is true.handleInfiniteScrollDisabled = (v) -> scrollEnabled = !v if scrollEnabled && checkWhenEnabled checkWhenEnabled = false handler()
In the handler() function:
if shouldScroll checkWhenEnabled = true if scrollEnabled if scope.$$phase || $rootScope.$$phase scope.infiniteScroll() else scope.$apply(scope.infiniteScroll) else checkWhenEnabled = false
if shouldScroll is always true (when scroll to then end), then checkWhenEnabled is also always true. When we toggle
infinite-scroll-disabled
in our infinite scroll function, 'handler()' will be constantly triggered byhandleInfiniteScrollDisabled()
causing infinite scroll function jumps into infinite loop.I think
checkWhenEnabled
should be set back to false if the infinite scroll function is able to be triggered inhandler()
so there is no need forhandleInfiniteScrollDisabled
to trigger it again:if shouldScroll checkWhenEnabled = true if scrollEnabled checkWhenEnabled = false if scope.$$phase || $rootScope.$$phase scope.infiniteScroll() else scope.$apply(scope.infiniteScroll) else checkWhenEnabled = false
It works for me.