【发布时间】:2015-10-04 07:46:05
【问题描述】:
我是 Angular 的新手......所以我确定我做错了什么。花了几个小时试图寻找解决方案,但 angularjs 文档几乎没用……而且几乎每个示例都试图将其设置为全局级别。
我正在尝试将复杂的 javascript 对象作为查询参数传递。该对象具有一个数组属性,因此我需要展平(专有名词??)该对象,以便 MVC 绑定可以正确实例化模型。
我试图传递的对象类似于
newRequest = {
SearchTerms: 'error',
PageSize: 25,
...
Facets: [
{ Field: 'createdBy', Value: 'Joe' },
{ Field: 'createdBy', Value: 'Mary' }
]
}
我声明我的资源如下
(function () {
"use strict";
angular
.module('common.services')
.factory('searchResource', ['$resource', 'appSettings', searchResource]);
function searchResource($resource, appSettings) {
return $resource(appSettings.searchPath, null, {
query: {
method: 'GET',
transformRequest: function (data, headersGetter) {
if (data === undefined) { // this is always true
return data;
}
return $.param(data);
}
}
});
}
}());
我正在使用它
vm.executeSearch = function () {
searchResource.query(
newRequest,
function (data) {
vm.response = data;
vm.request = data.Request;
}
);
}
transformRequest 函数正在被调用...并且headersGetter 有一个值。
附加信息
按照建议,我改变了方向,而不是使用资源,而是通过工厂提供服务。结果相同...data 参数未定义。这是新代码。
(function () {
"use strict";
angular
.module('common.services')
.factory('searchProvider', ['$http', 'appSettings', searchProvider]);
function searchProvider($http, appSettings) {
return {
query: function (request, callback) {
$http({
url: appSettings.searchPath,
method: 'GET',
params: request,
transformRequest: function (data, headersGetter) {
if (data == undefined) {
return data;
}
return $.param(data);
}
})
.success(function (data) {
callback(data);
});
}
}
}
}());
searchProvider.query(
newRequest,
function (data) {
console.log(data);
vm.response = data;
vm.request = data.Request;
}
);
但问题是data 是undefined!我知道newRequest 对象是有效的,因为呼叫结束了。只是有一个格式不正确的网址。我哪里做错了?
【问题讨论】:
-
要了解有关
$resource的更多信息,这是一本好书:blog.mgechev.com/2014/02/05/…
标签: angularjs angular-resource