AngularUI路线在拒绝承诺时解决问题

时间:2015-10-01 16:45:03

标签: angularjs angular-ui-router

我在下面提供了我的代码。基本上,当我加载我的视图时,我使用resolve来获取一些数据。在我的服务中,如果我的承诺被拒绝 - 在出错时 - 解决方案被无限调用。我应该有更好的方式来执行此操作吗?

(function () {

function AppService($q, $http, $log, $timeout, pageOptionsModel) {

    return {
        getPageOptions: function () {

            var deferred = $q.defer();

            var pageOptions = pageOptionsModel.getPageOptions();

            if (pageOptions === null) {
                $http.get("api/HomeApi/GetPageOptions")
                    .success(function (response) {
                        deferred.resolve(response);
                        $log.info("Successfully retriedved page options from service.");
                    })
                    .error(function (response) {
                        deferred.reject("Error");
                        $log.error("Errored while retrieving page options from service.");
                    });
            }
            else {
                deferred.resolve(pageOptions);
            }

            return deferred.promise;

        }
    }

};

function AppConfig($stateProvider, $urlRouterProvider, $locationProvider) {

    $urlRouterProvider.otherwise("line");

    // Now set up the states
    $stateProvider
        .state('line', {
            url: "/line",
            templateUrl: "app/line/lineTemplate.html",
            controller: "lineController",
            controllerAs: "line",
            resolve: {
                pageOptions: function (appService) {
                    return appService.getPageOptions();
                }
            }
        });

    $locationProvider.html5Mode({
        enabled: true,
        requireBase: false
    });

};

angular.module("app", ["ui.router", "ui.bootstrap", "app.line", "app.modal"])
    .config(AppConfig)
    .factory("appService", AppService);

})();

这是我的线路控制器,如果我的承诺被拒绝,它永远不会初始化。

 (function () {

function LineController($scope, pageOptions) {

    var self = this;

    // INITIALIZE
    self.pageOptions = pageOptions;

};

angular.module("app.line")
    .controller("lineController", LineController);

 })();

0 个答案:

没有答案