当服务失败时,如何解析状态

How do i resolve state when service has been failed

本文关键字:何解析 状态 服务 失败      更新时间:2023-09-26

感谢阅读此问题。我正在制作AngularJS应用程序。我做了一个状态和定义解析,调用User.getProfile,它在User服务中定义。因此,当服务成功获取配置文件时,此解析有效,但当服务失败时,该解析无效。让我发布一个代码。

    .state('app.profile', {
        url: '/profile',
        views: {
            'menuContent': {
                templateUrl: 'views/pages/profile.html',
                controller: 'ProfileCtrl',
            }
        },
        resolve: {
            data: function(User) {
                return User.getProfile();
            }
        }
    })

这是我定义的服务。

service.getProfile = function() {
        var deferred = $q.defer();
        HttpReq.sendRequest( RESTAPI.DEV_URL + RESTAPI.PROFILE,
            'GET',
            undefined,
            function(result) {
                /*
                */
                if (result.success) {
                    deferred.resolve(result);
                }
                else {
                    deferred.reject(result);
                }
            },
            function(error, response) {
                deferred.reject(error);
                //uiHelper.alert($scope, 'Login Error', response.message);
        });
        return deferred.promise;
    };

在服务中调用deferr.resolve时解析app.profile。但在调用deferr.reject时未解决。如果我在承诺电话中有问题,请纠正我。

谢谢!

如果解析函数失败,您可能需要向用户显示相应的内容(如错误消息)。最好让解析函数返回promise(不返回)并使用内部事件$routeChangeError。

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