在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()