大佬教程收集整理的这篇文章主要介绍了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有一个值.
附加信息
正如所建议的那样,我改变了方向,而不是使用我通过工厂提供服务的资源.结果相同……数据参数未定义.这是新代码.
(function () { "use Strict"; angular .module('common.services') .factory('searchProvider',['$http',searchProvider]); function searchProvider($http,appSetTings) { return { query: function (request,callBACk) { $http({ url: appSetTings.searchPath,method: 'GET',params: request,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; } );
但问题是数据未定义!我知道newrequest对象是有效的,因为调用已经结束.只是有一个格式不正确的网址.我哪里做错了?
见https://github.com/angular/angular.js/blob/master/src/ngResource/resource.js#L526
var hasBody = /^(POST|PUT|PATCH)$/i.test(action.method);
它使用hasBody来确定是否设置数据参数.
所以在这一点上你最好的选择是转向使用$http,因为ngresource用于更多RESTful api或将你的API切换到POST而不是GET.
编辑
还有一件事:你不需要使用if(data === undefined)
当你能做到:if(!data)意味着同样的事情.
Javascript pututhiness:https://developer.mozilla.org/en-US/docs/Glossary/Truthy
回复其他信息
您仍然未对数据进行定义,因为您没有将数据设置为任何内容,而是设置了参数.但是一旦你在这里,你就不需要改变请求了.
你可以这样做
$http({ ... params: $.param(request),... })
以上是大佬教程为你收集整理的angularjs – 为什么资源查询转换中的数据变量未定义全部内容,希望文章能够帮你解决angularjs – 为什么资源查询转换中的数据变量未定义所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。