我刚开始使用$resource
来检索数据,并且在执行自定义操作时遇到问题。标准GET
正在使用如下的对象ID;
pageContentService.get({ pageId: 1 }, function (data) {
vm.pageContent = data.content;
});
我也希望能够使用字符串检索相同的数据如下;
pageContentService.getByPageName({ pageName: "Home" }, function (data) {
vm.pageContent = data.content;
});
我的$resource
服务是;
(function() {
"use strict";
angular
.module("common.services")
.factory("pageContentService", ["$resource", pageContentService]);
function pageContentService($resource) {
return $resource("/api/pageContent/:pageId", null,
{
"getByPageName": { method: "GET", url: "/api/pageContent/:pageName", isArray: false }
});
};
})();
而且我嘲笑后端如下;使用“PAGEID”何时返回数据。但是,它不会出现在后面的代码执行服务的“getByPageName”行动
(function (undefined) {
"use strict";
var app = angular.module("pageContentServiceMock", ["ngMockE2E"]);
app.run(function ($httpBackend) {
var content = [
{ "pageId": 0, "pageName": "Unknown", "content": "<h1>Page not found</h1>" },
{ "pageId": 1, "pageName": "Home", "content": '<h1>Home Page</h1>' },
{ "pageId": 2, "pageName": "Programs", "content": '<h1>Programs Page</h1>' }
];
var contentUrl = "/api/pageContent";
$httpBackend.whenGET(contentUrl).respond(content);
var contentById = new RegExp(contentUrl + "/[0-9][0-9]*", '');
$httpBackend.whenGET(contentById).respond(function (method, url, data) {
var pageContent = content[0];
var parameters = url.split("/");
var length = parameters.length;
var pageId = parameters[length - 1];
if (pageId > 0) {
for (var i = 0; i < content.length; i++) {
if (content[i].pageId == pageId) {
pageContent = content[i];
break;
}
}
}
return [200, pageContent, {}];
});
var contentByName = new RegExp(contentUrl + "/[a-z][A-Z]*", '');
$httpBackend.whenGET(contentByName).respond(function (method, url, data) {
var pageContent = content[0];
var parameters = url.split("/");
var length = parameters.length;
var pageName = parameters[length - 1];
if (pageName.length > 0) {
for (var i = 0; i < content.length; i++) {
if (content[i].pageName == pageName) {
pageContent = content[i];
break;
}
}
}
return [200, pageContent, {}];
});
});
})();
的代码按预期工作。
根据我的理解,自定义操作用于扩展标准$resource
方法的现有功能,因此我认为我没有正确实施它。
按照您的建议修改了代码,但是当使用'pageContentService.getByPageId({pageId:1},function(data){vm.pageContent = data.content;})调用getPageById或getPageByName'时,或者'pageContentService.getByPageName({pageName:“Home”},function(data){vm.pageContent = data.content;});'。注意:我改变了'getPageById'来使用'pageId',所以它与'getPageByName'一致。 –
你确定你可以用这个URL做GET吗? '/ API/pageContent /:pageName' –