Javascript 如何";重建“;angularjs工厂的$resource?

Javascript 如何";重建“;angularjs工厂的$resource?,javascript,angularjs,Javascript,Angularjs,我正在我的AngularJS Laravel项目中实现我自己的API令牌系统,因此API令牌使用头通过$http发送。问题是,当用户登录时,它会在API工厂中设置API令牌,但$resource不会得到更新 myApp.factory('Api', ['$resource', '$http', '$cookies',function($resource, $http, $cookies) { var baseURL = 'an api url'; var APIToken = $

我正在我的AngularJS Laravel项目中实现我自己的API令牌系统,因此API令牌使用头通过$http发送。问题是,当用户登录时,它会在API工厂中设置API令牌,但$resource不会得到更新

myApp.factory('Api', ['$resource', '$http', '$cookies',function($resource, $http, $cookies) {
    var baseURL = 'an api url';
    var APIToken = $cookies.token;

    return {
        SetToken: function(token) {
            APIToken = token;
            console.log(APIToken);
        },

        Authenticator: function(data,callback) {
            $http({
                url: baseURL + 'auth', 
                method: "GET",
                params: data
            }).success(callback);
        },
        Authors: $resource(baseURL + "journalists/:id", {id: '@id'}, {
            update: {
                method:'PUT',
                headers: { 'API-Token': APIToken }
            },
            query: {
                method:'GET',
                isArray: true,
                headers: { 'API-Token': APIToken }
            }
        }),
    };
}]);

最有趣的部分是
头:{'API-Token':APIToken}
部分。问题是,当调用
SetToken
时,
标题将不会得到更新。这有什么办法吗?我是否为此使用了错误的函数?

您的
$resource
对象仅在调用时创建和设置一次。它不会在每次调用其函数时访问
APIToken
变量。为了使上述代码正常工作,您必须在调用
Authors()
之前调用
SetToken()
,因为一旦调用
Authors()
,就会创建
$resource
对象,并在此时使用
APIToken
的值。我不知道有什么方法可以做你想做的事情,并且仍然使用
$resource
服务。您可能需要直接使用
$http
服务,就像您对
验证器
功能所做的那样

Authors: {
    update: function(obj){
        $http({
            url: baseURL + 'journalists/' + obj.id, 
            method: "PUT",
            params: obj
        });
    },
    query: function(obj){
        $http({
            url: baseURL + 'journalists/' + obj.id, 
            method: "GET",
            params: obj
        });
    },
})

或者类似的。希望这能有所帮助。

这正是要走的路。谢谢你给我指明了正确的方向!