AngularJS根据方法更改网址(Get,Put)

时间:2014-11-28 14:10:43

标签: javascript angularjs http-headers

我在Angular中使用工厂将ajax请求绑定到我的web api。工厂看起来像这样。

app.factory('QuestionContainer', ['$resource', function ($resource) {
return $resource('http://localhost:52133/api/questioncontainerapi/:id', null,
    {
        'update': { method: 'PUT' },
        'publish': { method: 'Put', url: 'http://localhost:52133/api/questioncontainerapi/:id/Publish/' }
    });
}]);

正如您所看到的,我已将:id放在网址中的两个操作之间,该方法目前为Put。如果我在我的控制器中使用这样的工厂 - >

QuestionContainer.publish({ id: 1 });

请求网址为http://localhost:52133/api/questioncontainerapi/Publish/,其正文为{ id: 1 }。如果我使用Get方法,请求网址会更改为http://localhost:52133/api/questioncontainerapi/1/Publish/,这就是我想要的网址。

我如何让Angular明白这一点? 谢谢!

1 个答案:

答案 0 :(得分:1)

您需要指定参数,请尝试使用以下代码:

app.factory('QuestionContainer', ['$resource', function ($resource) {
return $resource('http://localhost:52133/api/questioncontainerapi/:id', {id: '@id'},
    {
        'update': { method: 'PUT' },
        'publish': { method: 'Put', url: 'http://localhost:52133/api/questioncontainerapi/:id/Publish/' }
    });
}]);

jsfiddle

在控制台中,您可以看到请求

<强>解释

url:/ some /:param

必须定义Param,所以我们说{param: 'text'},在这种情况下,网址将始终解析为/some/text ..

但是如果我们想根据我们指定的变量获得动态网址:{param: '@p'} 其中p是属于实例资源的变量,或者是传递给类资源的数据对象。

QuestionContainer.publish({ id: 1 }); // {id: 1} is the data object

因此,如果我们想要/ some / 3,我们会像下面这样做:

QuestionContainer.publish({ p: 3 }); // class
var question = new QuestionContainer({p: 3}); // or new QuestionContainer(); question.p = 3;
question.$publish();

官方网页可以扩展更多内容:$resource