使用角度js中的$ resource发送标头

时间:2017-03-12 07:45:13

标签: angularjs angular-resource

我想每次从工厂端为CRUD操作发送标题。 这是我的工厂

var appangular.module("LifeStyleFactModule",["ngResource"]);
 app.constant("RES_URL", "http://localhost:9090/")
app.factory("CategoryFactory",function($resource,RES_URL){
var categoryinfo;
var categoryresource=$resource(RES_URL+"category/:id",{"id":"@id"},{update:{method:"PUT"}});
return{
    getcategory:function(){
        categoryinfo=categoryresource.query();
        return categoryinfo;
    },
     addcategoryItem:function(categoryItem){

        var category = new categoryresource(categoryItem);
        category.$save(function(respdata){

            categoryinfo.push(respdata);

        },function(respdata){
        });
    },
    deletecategoryItem:function(idx,id){
        var category=new categoryresource({"id":id});
        category.$delete(function(){
            categoryinfo.splice(idx,1);
        },function(){
        })
    },
    updatecategoryItem:function(categoryItem,idx){
        var category=new categoryresource(categoryItem);
        category.$update({"id":categoryItem._id},function(data){
             categoryinfo[idx]=data;
        },function(){
        })
    }
}
})

以上功能运作良好。现在我想在标题中发送令牌。我怎样才能做到这一点。

我试图通过以下方式来做到这一点

var categoryresource=$resource(RES_URL+"category/:id",{"id":"@id"},{update:{method:"PUT"},headers:{"token":"@token}});

但没有得到如何发送令牌以进行CRUD操作。

程序是否正确,如果是,我该如何发送令牌。

请告诉我这个方法。

而不是上面的方法,我尝试了以下方式

 $resource(RES_URL+"category",{},{query:{method:"get",isArray:true,headers:{"token":token}}}).query({},function(res){});

这是有效的,但是第一个程序的程序。

请在回复后将其标记为重复或投票

不要说(/ {这样的东西不见了。

1 个答案:

答案 0 :(得分:0)

对我来说,最好的解决方案是使用拦截器。这是一种在标题中发送令牌的方法,我在我的一个项目中使用过。

angular
  .module('app.core')
  .config(config);

config.$inject = ['$httpProvider'];

function config($httpProvider) {
  $httpProvider.interceptors.push(interceptor);
}

interceptor.$inject = ['$q', '$injector', 'AuthModel'];

function interceptor($q, $injector, AuthModel) {
  return {
    request: function (config) {
      config.headers.Authorization = AuthModel.token;
      return config;
    },
    responseError: function (rejection) {

    }
  };

}

添加了一个jsfiddle来演示

https://jsfiddle.net/Sergey_Mell/c47js1zc/

只需点击发送按钮,然后查看开发者工具中的请求标题

即可