我剛開始使用$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' –