Jean B
Jean B

Reputation: 341

AngularJS Resolve Dependencies

I am working on an app to allow users to login with different level or access to an application. I added a resolve dependencies to get the list of users. It did return a list of correct users. How do I pass this object to the controller? I follow a similar example on the website, but my getPrelogin object is always undefined. What did I do wrong?

.state('registration.login', {
            url: '/Login',
            resolve: {
                preLoginFactory: 'preLoginFactory',
                getPrelogin: function (preLoginFactory) {
                    var result = preLoginFactory();
                    result.then(function (result) {
                        return result.data.Model.IntroMessage;
                    })
                }

            },
            views: {
                "content@": {
                    templateUrl: '/Account/Login',
                    controller: function ($scope, $stateParams, $location, LoginFactory, getPrelogin, preLoginFactory) {
                        console.log('the value of get pre login')
                        console.log(getPrelogin);
                        $scope.introMessage = getPrelogin;
                        $scope.loginForm = {
                            emailAddress: '',
                            password: '',
                            rememberMe: false,
                            returnUrl: $stateParams.returnUrl,
                            loginFailure: false
                        };
                        $scope.login = function () {
                            var result = LoginFactory($scope.loginForm.emailAddress, $scope.loginForm.password, $scope.loginForm.rememberMe);
                            result.then(function (result) {
                                if (result.success) {
                                    if ($location.loginForm.returnUrl !== 'undefined') {
                                        $location.path('/routeOne');
                                    } else {
                                        $location.path($scope.loginForm.returnUrl);
                                    }
                                } else {
                                    $scope.loginForm.loginFailure = true;
                                }
                            });
                        };
                    }//"LoginController"
                }
            }
        })

Upvotes: 1

Views: 630

Answers (2)

Pankaj Parkar
Pankaj Parkar

Reputation: 136144

Your resolve object getPrelogin should return result variable, because promise preLoginFactory factory does return promise object. By injecting getPrelogin inside controller you would directly get data returned from getPrelogin which is result.data.Model.IntroMessage.

Code

resolve: {
  preLoginFactory: 'preLoginFactory',
  getPrelogin: function(preLoginFactory) {
      var result = preLoginFactory();
      return result.then(function(response) {
        return response.data.Model.IntroMessage;
      })
  }
},

Upvotes: 1

Kędrzu
Kędrzu

Reputation: 2425

You must return your promise:

getPrelogin: function (preLoginFactory) {
     var result = preLoginFactory();
     return result.then(function (result) {
         return result.data.Model.IntroMessage;
     })
}

Upvotes: 1

Related Questions