AngularJsでController実行前に処理する方法

AngularJsでrouteProvideで処理を分けているけど、ログインチェックとかを共通でController実行前にしたいなぁと思いつついまいち情報がなかったのでメモ

resolveと$q 使って処理すればいけそうな感じで
http://stackoverflow.com/questions/18010796/return-interdependent-async-promises-in-routeprovider-resolve
http://stackoverflow.com/questions/17731942/how-to-load-data-synchronously-in-angularjs-application
これつかっていけたぜヒャッホウと思ったら、リロードでうまく動かないことがあったので(勘違いもあったかも)
http://stackoverflow.com/questions/16286605/initialize-angularjs-service-with-asynchronous-data#16754186
こちらの方法でうまくいった。

app.config(['$routeProvider',
  function($routeProvider) {
    $routeProvider.
      when('/', {
        templateUrl: 'partial/index.html',
        controller: 'IndexCtrl',
        resolve: {
          user: function($q, loginCheck){
            var d = $q.defer();
            loginCheck(d);
            return d.promise;
          }
        }
      }).
      otherwise({
        redirectTo: '/'
      });
  }]);

app.factory('loginCheck', ['$q','$http', '$rootScope', function($q, $http, $rootScope) {
  return function(d) {

    $http({
      method: 'POST',
      url: '/user',
    }).
      success(function(data, status, headers, config) {
        $rootScope.hoge = data;
        d.resolve(data);
      }).
      error(function(data, status, headers, config) {
          d.reject(status);
        }
      });
    return d.promiss; // ここは怪しい
  }
}]);

app.controller('IndexCtrl', ['$scope', '$rootScope', 'user',
  function($scope, $rootScope, user) {
     console.log(user);
    console.log($rootScope.hoge);
  }
]);
       

ちょっと書き換えたりしているのでもしかしたら動かないかも
そもそもfactoryとかserviceとかいろいろあってよくわかってないのです。