Javascript 在angularjs中转换$.param
在使用JQuery之前,我使用它发送带有参数的URLJavascript 在angularjs中转换$.param,javascript,jquery,angularjs,url,param,Javascript,Jquery,Angularjs,Url,Param,在使用JQuery之前,我使用它发送带有参数的URL window.location = myUrl + $.param({"paramName" : "ok","anotherParam":"hello"}); 但对于angularjS,这与工作方式不同 $scope.myButton = function() { $window.location.open = myUrl + $.param({"paramName" : "ok","anotherParam":"hello"});
window.location = myUrl + $.param({"paramName" : "ok","anotherParam":"hello"});
但对于angularjS,这与工作方式不同
$scope.myButton = function() {
$window.location.open = myUrl + $.param({"paramName" : "ok","anotherParam":"hello"});
};//Error: $ is not defined
如果您想创建数据的序列化表示,有谁能帮助我在angularJs中实现这一点
并将其用于数据序列化我发现此函数对于url序列化非常有用。也适用于嵌套对象
var param = function(obj) {
if ( ! angular.isObject( obj) ) {
return( ( obj== null ) ? "" : obj.toString() );
}
var query = '', name, value, fullSubName, subName, subValue, innerObj, i;
for(name in obj) {
value = obj[name];
if(value instanceof Array) {
for(i in value) {
subValue = value[i];
fullSubName = name + '[' + i + ']';
innerObj = {};
innerObj[fullSubName] = subValue;
query += param(innerObj) + '&';
}
} else if(value instanceof Object) {
for(subName in value) {
subValue = value[subName];
fullSubName = name + '[' + subName + ']';
innerObj = {};
innerObj[fullSubName] = subValue;
query += param(innerObj) + '&';
}
}
else if(value !== undefined && value !== null)
query += encodeURIComponent(name) + '=' + encodeURIComponent(value) + '&';
}
return query.length ? query.substr(0, query.length - 1) : query;
};
您只需在javascript对象上使用$.param并将其传递给$resource或$http,它就可以正常工作。但需要注意的是,确保它是一个对象而不是数组
var badParam = {'name':'john',...}; // contains more properties
var goodParam = {name :'john',...}; // contains more properties
AngularJs的核心是jquery lite,因此您可以使用angular.element.param()而不是$.param()AngularJs中有一个内置的序列化程序,它模仿$.param():
您可以插入并使用此函数:$httpParamSerializerJQLike()您在这里想做什么?如下图所示,如果您想使用jquery函数,请访问www.test.com?option=ok添加jquery。否则,您需要使用老的javascript方法来完成。angular使用jquery lite-最终,当按钮被单击时,您可能需要一个angular指令来处理。我想您需要类似于
$location.path('xxurlxx')的东西
但我不确定该参数,因为我不清楚如何使用选项
如何使用此函数??如果数据包含嵌套对象,此函数将不起作用,即:如果数据类似于{foo:[{id:1,val:'test'},{id:2,val:'test2'},{test test:'myTest}不重新发明轮子是行不通的。如果jQuery已经实现了这一点,请使用它。不要太害怕混合这些库。这是最好的答案。编写已经存在的代码不是一个好主意,..param()不包括在jQLite中:如果您仍然包括jQuery,这可能会起作用,因为angular将使用它,但对于纯angular(jQuery Lite),它抛出TypeError:angular.element.param不是一个函数,它不起作用<代码>未捕获类型错误:angular.element.param不是函数(…)我编辑了此答案,以避免jQuery lite包含.param()
的错误信息。谢谢你的澄清@AlexRoss!请注意,$httpParamSerializer
和$httpParamSerializerJQLike
是可用的,因为Angular 1.4这应该是真正的答案
var badParam = {'name':'john',...}; // contains more properties
var goodParam = {name :'john',...}; // contains more properties