我在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明白这一点? 谢谢!
答案 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/' }
});
}]);
在控制台中,您可以看到请求
<强>解释强>
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