我使用带有角$资源的REST服务器API。我无法控制Server API。 Server API要求列表项具有属性ItemTyp,其中列表名称附加了Item。哪个是冗余信息
我想为多个列表使用相同的资源而不是。我试过以下:
(function () {
'use strict';
angular.module('mod', ['ngResource']);
angular.module('mod').controller('Controller', function (ListItem) {
var listItem1 = new ListItem({ a: 1 });
listItem1.$save();
var listItem2 = new ListItem({ b: 2 });
listItem2.$save({ listName: 'list2' });
});
angular.module('mod').factory('ListItem', function ($resource) {
return $resource('/_api/lists/:listName/:Id', { listName: 'list1', Id: '@Id' },
{
save: {
method: 'POST',
transformRequest: function (data) {
//data.ItemTyp = listName + "Item";
return angular.toJson(data);
}
}
});
});
})();
但我发现无法在transformRequest中获取参数。有没有办法让params或其他方法来解决我的问题?
答案 0 :(得分:1)
您需要一个包装函数来将参数解析为该对象。看看someData
。顺便说一句。您不需要创建像new ListItem()
这样的新对象。
(function () {
'use strict';
angular.module('mod', ['ngResource']);
angular.module('mod').controller('Controller', function (ListItem) {
ListItem({ data: 'test'}).save({Id: 3, listName: 'testName'});
ListItem({ data: 'test'}).save({Id: 4, listName: ''});
});
angular.module('mod').factory('ListItem', function ($resource) {
return function (someData) {
return $resource('/_api/lists/:listName/:Id', {
listName: '@listName',
Id: '@Id'
}, {
save: {
method: 'POST',
transformRequest: function (data) {
//data.ItemTyp = listName + "Item";
console.log(someData);
return angular.toJson(data);
}
}
}
);
}
});
})();
答案 1 :(得分:1)
我发现我的解决方案基于lins回答(谢谢!)。我根据返回函数的参数设置$ resource的defaultParams。在完整代码中,{a:1}和{b:2}来自模型,因此添加listName会感觉很脏。
(function () {
'use strict';
angular.module('mod', ['ngResource']);
angular.module('mod').controller('Controller', function (ListItem) {
ListItem({ listName: 'testName' }).save({ a: 1 });
ListItem().save({ b: 2 });
});
angular.module('mod').factory('ListItem', function ($resource) {
return function (params) {
var defaultParams = {
Id: '@Id',
listName: 'test'
}
if (params) {
angular.forEach(params, function (v, k) {
defaultParams[k] = v;
});
}
return $resource('/_api/lists/:listName/:Id', defaultParams, {
save: {
method: 'POST',
transformRequest: function (data) {
data.ItemTyp = defaultParams.listName + "Item";
return angular.toJson(data);
}
}
});
}
});
})();