gpt4 book ai didi

angularjs - 为什么资源查询转换中未定义数据变量

转载 作者:行者123 更新时间:2023-12-04 19:53:24 24 4
gpt4 key购买 nike

我是 Angular 的新手......所以我确定我做错了什么。花了几个小时试图寻找解决方案,但 angularjs 文档几乎没用......而且几乎每个例子都试图将其设置为全局级别。

我正在尝试将复杂的 javascript 对象作为查询参数传递。该对象具有一个数组属性,因此我需要展平(专有名词??)此对象,以便 MVC 绑定(bind)可以正确实例化模型。

我试图传递的对象类似于

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有一个值(value)。

附加信息

正如建议的那样,我改变了方向,而不是使用资源,而是通过工厂提供服务。结果相同... 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;
}
);

但问题是 dataundefined !我知道 newRequest对象是有效的,因为调用出去了。只是有一个格式不正确的网址。我哪里做错了?

最佳答案

问题是它是一个 GET 请求并且 ngResource 不会接受 data在 GET 请求中:

https://github.com/angular/angular.js/blob/master/src/ngResource/resource.js#L526
var hasBody = /^(POST|PUT|PATCH)$/i.test(action.method);
它使用 hasBody确定是否设置data参数与否。

所以此时你最好的选择是使用 $http,因为 ngResource 用于更 RESTful 的 api,或者将你的 API 切换为 POST 而不是 GET。

编辑

还有一件事:你不需要使用 if (data === undefined)什么时候可以做:if(!data)这意味着同样的事情。

Javascript thruthiness : https://developer.mozilla.org/en-US/docs/Glossary/Truthy

回复附加信息

您仍然在数据中未定义,因为您没有将数据设置为任何内容,而是在设置参数。但是一旦你在这里,你不需要转换请求。

你可以做

$http({
...
params: $.param(request),
...
})

关于angularjs - 为什么资源查询转换中未定义数据变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32918404/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com