AngularJS: разрешить в RouteProvider - обнаружение успеха/сбоя? - программирование

AngularJS: разрешить в RouteProvider - обнаружение успеха/сбоя?

У меня есть решение, работающее над моим маршрутизатором, но я просто верну обещание, поэтому я не знаю, был ли его успех или неудача. Это то, что у меня есть

.when('/items', {
    templateUrl: 'views/items.html',
    controller: 'ItemsCtrl',
    resolve: {
        resolvedData: function(Restangular) {
            return Restangular.one('Items').get();
        }
    }
})

Теперь это работает, но как я могу определить успех или неудачу... Я мог бы ввести это в метод разрешения, но что бы я вернулся в успех и неудачу... Помня, что мне нужно, чтобы элемент был введен в мою контроллер.

.when('/items', {
    templateUrl: 'views/items.html',
    controller: 'ItemsCtrl',
    resolve: {
        resolvedData: function(Restangular) {
            Restangular.one('Items').get().then(function(data) {
                // success
            }, function() {
                // failure
            });
        }
    }
})

Я видел пример здесь, но я смущен, если это то, что мне нужно и как его использовать?

AngularJS - отклонено обещание $http с $routeProvider: разрешить

Кажется, он возвращает обещание руководства.

resolve: {
    response: ['Warranty'
        '$q',
        function(Warranty, $q) {
            var dfd = $q.defer();
            Warranty.sendRequest().then(function(result) {
                dfd.resolve({
                    success: true,
                    result: result
                });
            }, function(error) {
                dfd.resolve({
                    success: false,
                    reason: error
                });
            });
            return dfd.promise;
        }
    ]
}

Я бы очень признателен за любую помощь, которую кто-либо имеет.

Что я действительно хочу сделать, так это то, что в моем контроллере есть разрешенная переменная, введенная в контроллер, если она терпит неудачу, то я также хотел бы получить доступ к сбою в контроллере, чтобы я мог показать пользователю, что он был " возможно сделать из-за проблемы.

4b9b3361

Ответ 1

Вы можете просто вернуть возвращаемое значение метода then:

resolve: {
    resolvedData: function(Restangular){
        return Restangular.one('Items').get().then(function (data) {
            ...
            return successData; // resolvedData will be resolved with the successData
            }, function () {
            ...
            return failureData; // resolvedData will be resolved with the failureData
            });
    }
}

Метод then doc:

Этот метод возвращает новое обещание, которое разрешается или отклоняется с помощью возвращаемого значения successCallback или errorCallback.

Ответ 2

Если функция разрешения выйдет из строя, вы, вероятно, захотите соответствующим образом отобразить пользователю (например, сообщение об ошибке). Было бы лучше, если бы функция разрешения возвращала обещание (без then) и использовала внутреннее событие $routeChangeError.

myApp.run(['$rootScope',function($rootScope) {
  $rootScope.$on('$routeChangeError', function() {
    // what you want to do if an error occurs 
    // ex: $rootScope.displayErrorMessage = true
  });

])

Также будет проще справляться с общей ошибкой (например, сбой сети/сервер и т.д.).