私はUI-ルータの状態「に」特定の状態変化を防止するにはどうすればよい(それがフォーカス取得時使用している?)私はこのルートを持っていると仮定すると:防止HTTPクエリに基づいてUI-ルータの状態変化
.state('auth.confirm', {
url: '/confirm/:resetToken',
template: '<confirm-page></confirm-page>',
data: { pageTitle: 'Confirm Reset', specialClass: 'gray-bg' }
})
とこの約束ベースの機能を備えたこのサービス:あなたは適応彼らの例をhttps://github.com/angular-ui/ui-router/wiki/Frequently-Asked-Questions#how-to-create-rules-to-prevent-access-to-a-state
のようにルールを作成することができます
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;
},
あなたは[解決](http://angular-ui.github.io/ui-router/site/#/api/ui.router.state.$からそれを行うことができます'validateResetToken'から約束したreturendを拒否することができるため、' onEnter'からではなく、状態の変更を中止します(https://github.com/angular-ui/ui-router/wiki#resolve) –
私はそれを試みました、多分私は間違ったことをしていましたが、拒絶は州の変化を防ぐようには見えませんでしたか? – alphadogg
私の問題は私が '解決したことだったと思います:... return AuthService.validateResetToken($ stateParams.resetToken).catch(function(){toastr.error(); return null;}); ...私はそれで何かをする拒絶反応をキャッチしていた。私はnullを返すことはreject()を返すことと同じであると仮定しました。 – alphadogg