以角度js解析函数内部的值

时间:2015-08-05 22:05:25

标签: javascript angularjs

我在名为Auth.js的文件中包含此代码。     hasRole:function(){             的console.log(currentUser);           return currentUser.role; // role是一个对象数组,但是给出了undefined            }

我需要在登录后的任何地方重定向之前解析hasRole的值。

登录看起来像这样:

 var role=[];

login: function(user, callback) {
        var cb = callback || angular.noop;
        var deferred = $q.defer();

        $http.post('/auth/local', {
          email: user.email,
          password: user.password
        }).
        success(function(data) {
          $cookieStore.put('token', data.token);
          currentUser = User.get();
          console.log(currentUser);//gives an unresolved promise (output is given after this piece of code.

           role = currentUser.role;  //gives undefined 
          deferred.resolve(data);    
          return cb();
        }).
        error(function(err) {
          this.logout();
          deferred.reject(err);
          return cb(err);
        }.bind(this));

        return deferred.promise;
      }}

并且调用如下:

 $scope.login = function(form) {
      $scope.submitted = true;

      if(form.$valid) {
        Auth.login({
          email: $scope.user.email,
          password: $scope.user.password
        })
        .then( function() {
          // Logged in, redirect to home
         var role = Auth.hasRole();
         console.log(role) //gives undefined.
        //Need to redirect on basis of value of role
        /*if(role.priority >= 1){
          $location.path('/admincontrol');

        }else{
          $location.path('/');

        }*/


        })
        .catch( function(err) {
          $scope.errors.other = err.message;
        });
      }
    };

如何在此处访问currentUser.role?我需要在登录之后和在重定向之前在$ scope.login中获取它的值,以便我可以根据其值重定向。

编辑:用户服务如下所示:

'use strict';

angular.module('createProjectApp')
  .factory('User', function ($resource) {
  //  return $resource('/api/users/:id/:controller', {
    return $resource('/api/customUsers/:id/:controller', {
      id: '@_id'
    },
    {
      changePassword: {
        method: 'PUT',
        params: {
          controller:'password'
        }
      },
      get: {
        method: 'GET',
        params: {
          id:'me'
        }
      }
      });
  });
登录时安慰的

currentUser如下所示:  enter image description here

1 个答案:

答案 0 :(得分:1)

User.get()本身就是一个返回promise的函数。在继续之前,您将不得不等待承诺满额,如

currentUser.then(function() {
  console.log(currentUser);
  role = currentUser.role;  //gives undefined 
  deferred.resolve(data);    
  return cb();
}
由于您使用的是承诺,因此不需要

cb()本身 - 但您可能会有一些特别的想法。