在angularjs中转换$ .param

在我使用JQuery之前,我使用它来发送带参数的URL

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中如何做到这一点

如果您尝试创建像$ .param()那样的数据的序列化表示,

 function serializeData( data ) { // If this is not an object, defer to native stringification. if ( ! angular.isObject( data ) ) { return( ( data == null ) ? "" : data.toString() ); } var buffer = []; // Serialize each key in the object. for ( var name in data ) { if ( ! data.hasOwnProperty( name ) ) { continue; } var value = data[ name ]; buffer.push( encodeURIComponent( name ) + "=" + encodeURIComponent( ( value == null ) ? "" : value ) ); } // Serialize the buffer and clean it up for transportation. var source = buffer.join( "&" ).replace( /%20/g, "+" ); return( source ); } 

并将其用于数据序列化

有一个角度内置的序列化器,模仿$ .param (): $ httpParamSerializerJQLike

AngularJs的核心有jquery lite,因此你可以使用angular.element.param()而不是$ .param()

我发现这个函数对于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 

你可以注入并使用这个函数:$ httpParamSerializerJQLike()