angular-redux / ng-redux

Angular bindings for Redux
MIT License
1.16k stars 178 forks source link

AngularJS too many digest iterations when using bound thunk action function #110

Open frankandrobot opened 7 years ago

frankandrobot commented 7 years ago

I'm getting this error when I add a bound thunk action to an attribute.

angular.js:68Uncaught Error: [$rootScope:infdig] 10 $digest() iterations reached. Aborting!

It is probably an angular issue but here's the scenario:

// setup controller
const unsubscribe = $ngRedux.connect(
      state => this.mapStateToThis(state, privileges),
   ),
   // this auto-injects the actions bound to ngRedux.dispatch
   Object.assign({}, Actions, AsyncActions)
)(this)

// thunk action creator
cancelSave(appUtilization) {
      return dispatch => {
        dispatch(AppActions.resetApp());
        appUtilization.$setPristine();
      }
 }

// template that breaks
<save-settings-panel cancel-action="$ctrl.cancelSave($ctrl.appUtilization)"></save-settings-panel>

Update: after doing a bit of research, it seems that #cancelSave will be called on each iteration of the digest loop. (See for example, http://stackoverflow.com/a/26783778/555493) Hence, the digest error.

The question then is how am I supposed to use #cancelSave without creating a proxy function in the controller?

AntJanus commented 6 years ago

@frankandrobot were you able to resolve this issue? I don't believe it's ng-redux related. My guess is that whatever is calling $ctrl.cancelSave is doing so at the wrong time or in the wrong place?