javascript - hora - Convertir $.param en angularjs
new date() angularjs (6)
AngularJs tiene jquery lite en su núcleo para que pueda usar angular.element.param () en lugar de $ .param ()
Antes de usar JQuery y uso esto para enviar una URL con un parámetro
window.location = myUrl + $.param({"paramName" : "ok","anotherParam":"hello"});
pero con angularjS esto no funciona de la misma manera
$scope.myButton = function() {
$window.location.open = myUrl + $.param({"paramName" : "ok","anotherParam":"hello"});
};//Error: $ is not defined
¿Alguien puede ayudarme a hacer esto en angularJs?
Encontré esta función útil para la serialización de url. También funcionará para objetos anidados.
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;
};
Hay un serializador incorporado en angular que imita $ .param (): $httpParamSerializerJQLike
Si está intentando crear una representación serializada de datos como lo hace $.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 );
}
y usar esto para su serialización de datos
Simplemente puede usar $ .param en el objeto javascript y pasarlo a $ resource o $ http y debería funcionar bien. Una advertencia, sin embargo, es asegurar que sea un objeto y no una matriz.
var badParam = {''name'':''john'',...}; // contains more properties
var goodParam = {name :''john'',...}; // contains more properties
puede inyectar y usar esta función en su lugar: $ httpParamSerializerJQLike ()