0

以下是我的$routeProvider代码 -

  $routeProvider
    .when("/login", {
      template: JST["app/templates/login"],
      controller: "LoginController",
    })
    .when("/dashboard", {
      template: JST["app/templates/dashboard"],
      controller: "DashboardController",
      resolve:{
        getUser: function(UserService) {
          return UserService.chkUser()
        }
      }
    })
    .otherwise({ redirectTo: function() {window.location = "/login";} });

    $locationProvider.html5Mode(true);
});

以下是我的UserService代码 -

angular.module("app").factory("UserService", function($http, $q, User) {
  return {
    chkUser: function() {
      var defer = $q.defer();

      defer.resolve(false);
      return defer.promise;
      // Also tried -
      // window.location = "/login";
    }
  };
});

问题-

现在,当我在浏览器中导航到http://example.com/dashboard时,我应该会在“/login”处重新登录,但我没有,让我知道我resolve在 angularJS 中的用法有什么问题。

4

1 回答 1

1

好吧,你的决心工作正常,如果你注入getUserDashboardController它的价值应该是falsefalse因为你立即用价值解决了承诺。

尝试这样的事情:

angular.module("app").factory("UserService", function($http, $q, User, $location) {
  return {
    chkUser: function() {
      var defer = $q.defer();
      $http(...., function(user){
         if(user){
            defer.resolve(user);
         }else{
            defer.reject();
            $location.path('/login');
         }
      });
      return defer.promise;
    }
  };
});

或者创建一个重现问题的小提琴,这样我们就可以看看并触摸那个。

于 2014-08-25T12:01:15.533 回答