Prevent a state change in ui-router based on HTTP query

Viewed 1501

How do I prevent a state change for a specific "to" state in ui-router (is it using onEnter?) assuming I have this route:

.state('auth.confirm', {
  url: '/confirm/:resetToken',
  template: '<confirm-page></confirm-page>',
  data: { pageTitle: 'Confirm Reset', specialClass: 'gray-bg' }
})

and this service with this promise-based function:

validateResetToken: function(resetToken) {
  var self = this;
  var deferred = $q.defer();

  $http.post(AppConstants.hostRootUrl + '/auth/reset/validate', { resetToken: resetToken })
    .then(function(response) {
      if(response.data && response.data.success) {
        // if we got a 200 return and it indicates success in the response, resolve
        self.message = 'Success';
        deferred.resolve(self.message);
      }
      else if (response.data && !response.data.success && response.data.error) {
        // if we got a 200 return, but success is falsey and there's an error message, reject with that message
        self.message = response.data.error;
        deferred.reject(self.message);
      }
      else {
        // error with generic message
        self.message = 'Unknown response. Contact administrator.';
        deferred.reject(self.message);
      }
    }, function(errPost) {
      if (errPost.data && errPost.data.error) {
        self.message = errPost.data.error;
        deferred.reject(self.message);
      }
      else {
        self.message = 'Could not connect.';
        deferred.reject(self.message);
      }
    });

  return deferred.promise;
},
2 Answers
Related