如何通过POST和一些GET在Angularjs中的$ ng-resource发送一些params

时间:2016-07-25 17:48:50

标签: angularjs ngresource

我们使用ng-resource提供此服务:

var app = angular.module('salonesbelleza', []);
app.service("CentroBorrar_srv", function ($resource, UrlBaseApi_srv) {
return{

        return $resource('wa-centros/:id',
            {id:'@id', access_token:'@access_token'},
            { "post": { method: "DELETE",
                isArray: false,
                headers: {
                    'Accept': 'application/json; q=1.0, */*; q=0.1',
                    'Content-Type':'application/json'
                }
            }}
        );

}

});

在控制器中我们使用这种方式

var CentroBorrar_data = CentroBorrar_srv.post({
            id:10,
            othervar1:'VALUE_1',
            othervar1:'VALUE_2',
            access_token:'MY TOKEN'
        });

使用此ng-resource我们使用一些额外的变量来删除id = 10的元素,例如acces_token

这项工作非常好。 这是此ng-resource

生成的URL
wa-centros/10?access_token=MY_TOKEN&othervar1=VALUE_1&othervar2=VALUE_2

所有变量都是使用URL中的GET发送但我们希望使用POST发送一些变量而其他变量使用GET。例如,我们想使用POST发送othervar1和othervar2。

有没有办法我们可以在ng-resource定义中强制控制器中的var必须通过POST发送,哪些必须使用GET发送

我对这个问题感到迷茫

非常感谢您提前

1 个答案:

答案 0 :(得分:0)

是的,可以添加参数。您必须为此声明自定义操作。 有两种方法可以创建具有“非GET”类型的自定义操作(从角度文档中获取):

  1. 非GET“类”操作:Resource.action([parameters],postData,[success],[error])
  2. 非GET实例操作:实例。$ action([参数],[成功],[错误])
  3. 我认为你正在使用第一个,即非GET“类”行动。 根据你的例子,你应该有这样的东西:

    return $resource('rest-link/:id',
                {id:'@id', access_token:'@access_token'},
                { "yourCustomActionNameHere": { method: "POST",
                    isArray: false,
                    headers: {
                        'Accept': 'application/json; q=1.0, */*; q=0.1',
                        'Content-Type':'application/json'
                    },
                    params : {yourParam1 : val}
                }}
            );
    

    请注意,params已添加到您的资源操作中,即 yourParam1 。正如我之前提到的,它是一个非GET“类”动作,这意味着你也传递了数据对象。在调用资源时应该考虑到这一点:

    <YourResourceNameHere>.yourCustomActionNameHere({yourParam1: 12}, dataObject)
    

    您应该注意参数,即使用默认参数。对于非GET 方法,例如您没有为参数paramName提供值,意味着搜索将继续您定义的对象属性dataObject发送到 POST 方法中,搜索name-value对,其中name与您的paramName相同。

    你应该看看实例方法,在我看来它们更容易使用,并提供更大的灵活性和可读性。 例如,对于 POST 操作,您可以进行CentroBorrar.$save({param : val})之类的调用,其中 CentroBorrar 是一个实例,并会保存数据对象。 (简短示例here)。 真的希望这会有所帮助。