获取 transformRequest 中的参数
Get parameter in transformRequest
我将 REST 服务器 API 与 angular $资源一起使用。我无法控制服务器 API。服务器 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中的参数。有没有办法获取参数或其他方法来解决我的问题?
您需要一个包装函数来将参数解析为该对象。看看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);
}
}
}
);
}
});
})();
我根据林斯的回答找到了我的解决方案(谢谢!)。我根据返回函数的参数设置 $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);
}
}
});
}
});
})();
我将 REST 服务器 API 与 angular $资源一起使用。我无法控制服务器 API。服务器 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中的参数。有没有办法获取参数或其他方法来解决我的问题?
您需要一个包装函数来将参数解析为该对象。看看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);
}
}
}
);
}
});
})();
我根据林斯的回答找到了我的解决方案(谢谢!)。我根据返回函数的参数设置 $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);
}
}
});
}
});
})();