Я использую ui-router и дополнения ui-router
$scope.$on('$transitionStart', function (e, $transition$) {
var params = {id:1};
factory.webService(params)
.success(function (data) {
if (data.d == "Expired") {//Inspects the application session
//Stops the state request and sents you to the login screen
e.preventDefault();
location.href = "login.html";
}
else if (data.d == "NotAllowed") {
//Stops the state request and keeps you on the state you already are
e.preventDefault();
} else {
//Proceed to load the requested state
}
})
.error(function (data, status) {
alert(data.Message);
});
});
Мне нужно разрешить часть успеха до загрузки $stateChangeStart, и я не могу понять, как это сделать.
Есть ли способ достичь этого?
РЕДАКТИРОВАТЬ
Итак, у меня есть такой код
.state('myState', {
url: "/myState",
templateUrl: 'views/template.html',
controller: 'ctrlTemplate',
viewId: 99,
resolve: {
fn: function ($stateParams, myFactory) {
myFactory.checkSession({viewId:99})
.then(function onSuccess(response) {
var data = response.data;
if (data.d == "Expired") {
throw "Expired";
}
else if (data.d == "NotAllowed") {
throw "NotAllowed";
} else {
//RETURN to chain data
return data;
//Proceed to load the requested state
}
})
.catch(function (response) {
//e.preventDefault();
});
}
}
})
Функция $http .then
все еще обрабатывается ПОСЛЕ $stateChangeStart
и $transitionStart
, и новое состояние уже загружается. Я вижу, как это происходит в отладчике консоли браузера.
Пожалуйста, помогите.