【问题标题】:AngularJS UI Router Resolve not called second timeAngularJS UI Router Resolve 未第二次调用
【发布时间】:2016-11-14 14:15:09
【问题描述】:

我正在使用 AngularJS UI Router Resolves 来检查用户是否经过身份验证。但它只被调用一次。第一个它可以正常工作,但是当我尝试再次进入页面时,它会跳过解析部分并打开页面。

.state('login', {
    url: "/login/:state/:stateParams",
    templateUrl: "views/main.html",
    params: {
          stateParams: ""
       }
    })
.state('placeorder', {
    url: "/placeorder",
    templateUrl: "views/placeorder.html",
    params: {
         newOrder: {
             from: null,
             to: null,
             selectedLogType: null,
             selectedLogSubType: null
         }
    },
    resolve: {
        auth: function ($cookies, $stateParams, $location) {
            if (!angular.isDefined($cookies.get('token'))) {
                $location.path('/login/placeorder/'+JSON.stringify($stateParams.newOrder));
            }
            else {
                authService.checkToken().then(function (d) {
                if (d == false) {
                         $location.path('/login/placeorder/'+JSON.stringify($stateParams.newOrder));
                     }
                });
            }
        }
    }
});

更新: 我已经对其进行了以下更改,并且在没有设置 cookie 时它可以工作,但是对于异步功能它不起作用。当我登录时,它不起作用($q.resolve 部分)

.state('placeorder', {
    url: "/placeorder",
    templateUrl: "views/placeorder.html",
    params: {
        newOrder: {
            from: null,
            to: null,
            selectedLogType: null,
            selectedLogSubType: null
        }
    },
    controller: "placeOrderCtrl",
    resolve: {
        auth: function ($q, $cookies, $timeout, $stateParams, $state) {
            var defer = $q.defer();
            if (!angular.isDefined($cookies.get('token'))) {
                $timeout(function () {
                    $state.go('/login/placeorder/'+JSON.stringify($stateParams.newOrder));
                });
                defer.reject();
            }
            else {
                authService.checkToken().then(function (d) {
                    if (d == false) {
                        $timeout(function () {
                            $state.go('/login/placeorder/'+JSON.stringify($stateParams.newOrder));
                        });
                        defer.reject();
                    }
                    else
                    {
                        defer.resolve();
                    }
                });
            }
            return defer.promise;
        }
    }
})

现在它只是没有解决。

【问题讨论】:

  • 能否请您添加更多有关 ui 路由器状态层次结构的详细信息?您是否可能引用了已经处于活动状态的相同状态?如果不能重新实例化控制器,它也不会再次解析。
  • 是的,我愿意...第一次调用状态时,它重定向到“登录”,第二次调用它时,它重定向到“placeorder”(不输入解析)。如何让它每次都解决?
  • 我在调用状态时尝试使用 reload: true ,但它也没有以这种方式重新实例化。 $state.go("placeorder", {newOrder: $scope.newOrder}, { reload: true });

标签: angularjs angular-ui-router


【解决方案1】:

好的,我终于找到了解决方案。无论如何谢谢:)

.state('placeorder', {
    url: "/placeorder",
    templateUrl: "views/placeorder.html",
    params: {
        newOrder: {
            from: null,
            to: null,
            selectedLogType: null,
            selectedLogSubType: null
        }
    },
    controller: "placeOrderCtrl",
    resolve: {
        auth: function ($q, $cookies, $timeout, $stateParams, $state, authService) {
            var defer = $q.defer();
            if (!angular.isDefined($cookies.get('token'))) {
                $timeout(function () {
                    $state.go('/login/placeorder/'+JSON.stringify($stateParams.newOrder));
                });
                defer.reject();
            }
            else {
                authService.checkToken().then(function (d) {
                    if (d == false) {
                        $timeout(function () {
                            $state.go('/login/placeorder/'+JSON.stringify($stateParams.newOrder));
                        });
                        defer.reject();
                    }
                    else
                    {
                        defer.resolve();
                    }
                });
            }
            return defer.promise;
        }
    }
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    • 2016-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多