在我使用JQuery之前,我使用它来发送带参数
的URLwindow.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中如何做到这一点
答案 0 :(得分:36)
有一个角度内置的序列化程序,它模仿$ .param(): $httpParamSerializerJQLike
答案 1 :(得分:12)
如果您尝试创建像$.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 );
}
并将其用于数据序列化
答案 2 :(得分:8)
AngularJs的核心有jquery lite,因此你可以使用angular.element.param()而不是$ .param()
答案 3 :(得分:2)
我发现这个函数对于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;
};
答案 4 :(得分:0)
你可以简单地在javascript对象上使用$ .param并将其传递给$ resource或$ http,它应该可以正常工作。但需要注意的是确保它是一个对象,而不是一个数组。
var badParam = {'name':'john',...}; // contains more properties
var goodParam = {name :'john',...}; // contains more properties
答案 5 :(得分:0)
你可以注入并使用这个函数:$ httpParamSerializerJQLike()