Я использую angular -ui-router resolve
для получения данных с сервера перед переходом в состояние. Иногда запрос на сервер терпит неудачу, и мне нужно сообщить пользователю об ошибке. Если я вызову сервер из контроллера, я могу поместить then
и вызвать его службу уведомлений в случае сбоя вызова. Я поместил вызов на сервер в resolve
, потому что я хочу, чтобы состояния потомков дождались результата с сервера до их запуска.
Где я могу уловить ошибку в случае сбоя вызова на сервер? (Я прочитал документацию , но все еще не знаю, как это сделать. Кроме того, я ищу повод попробовать этот новый инструмент фрагмента:).
"use strict";
angular.module('MyApp', ["ui.router"]).config([
"$stateProvider",
"$urlRouterProvider",
function ($stateProvider, $urlRouterProvider) {
$urlRouterProvider.otherwise("/item");
$stateProvider
.state("list", {
url: "/item",
template: '<div>{{listvm}}</div>' +
'<a ui-sref="list.detail({id:8})">go to child state and trigger resolve</a>' +
'<ui-view />',
controller: ["$scope", "$state", function($scope, $state){
$scope.listvm = { state: $state.current.name };
}]
})
.state("list.detail", {
url: "/{id}",
template: '<div>{{detailvm}}</div>',
resolve: {
data: ["$q", "$timeout", function ($q, $timeout) {
var deferred = $q.defer();
$timeout(function () {
//deferred.resolve("successful");
deferred.reject("fail"); // resolve fails here
}, 2000);
return deferred.promise;
}]
},
controller: ["$scope", "data", "$state", function ($scope, data, $state) {
$scope.detailvm = {
state: $state.current.name,
data: data
};
}]
});
}
]);
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.22/angular.min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/angular-ui-router/0.2.10/angular-ui-router.min.js"></script>
<div ng-app="MyApp">
<ui-view />
</div>