2

嗨,所有角度大师,

我的问题是如何将一种服务方法的返回结果传递给其他方法。或者简而言之,我的服务中有一个身份验证方法,它的返回对象结果是一个令牌。对于驻留在同一服务上的其余 http 请求,该令牌将用于附加到我的标头中。

例如

我的服务 js

authenticatePlayer: function(postData) {
    return $http({
      method  : 'POST',
      url     : api + 'auth/player',
      data    : postData,
      headers : {'Content-Type' : 'application/json'}
    })
    .then(function(result) {
      return result.data.token; //this is now the token
    }, function (result) {
      console.log(result);
    });
  }

在服务 js 中,我还有其他 $http 请求,例如:

        getPlayerByEmail: function(email_address) {
        return $http({
            method  : 'GET',
            url       : api + 'player/' + email_address,
            headers : {'X-token': token} 
           //token here is from the authenticatePlayer method but how to get it??
        })
        .then(function(result) {
            return result.data;
        });
    }

这两个服务方法在两个控制器中调用,我的扩展问题是如何将 $scope 从一个控制器传递到另一个控制器,即使刷新页面,$scope 值也不会被破坏。

希望它有意义。

4

2 回答 2

4

在控制器之间共享 $scope 值的一种方法是创建一个service并将其注入您想要的任何控制器中;一个示例服务,

angular.module('myApp', [])
    .service('shareScope', function () {

        return {
            get: function () {
                return value;
            },
            set: function(data) {
                value = data;
            }
        };
    });

在您的控制器中;

function Ctrl($scope, shareScope) {
    $scope.prop2 = shareScope.set('data');
    $scope.both = shareScope.get();
}
于 2013-08-22T07:21:55.117 回答
0

将其存储在变量中:

angular.module('foo').factory('someService', function() {

    var token;

    return {
        authenticatePlayer: function(postData) {
            return $http({
                method  : 'POST',
                url     : api + 'auth/player',
                data    : postData,
                headers : {'Content-Type' : 'application/json'}
            })
            .then(function(result) {
                token = result.data.token; //this is now the token
            }, function (result) {
                console.log(result);
            });
        },
        getPlayerByEmail: function(email_address) {
            return $http({
                method  : 'GET',
                url       : api + 'player/' + email_address,
                headers : {'X-token': token} 
            })
            .then(function(result) {
                return result.data;
            });
        }
    };
});
于 2013-08-22T07:19:52.237 回答