转换成美元.angularjs中的参数

Convert $.param in angularjs

本文关键字:参数 angularjs 美元 转换      更新时间:2023-09-26

在我使用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中做到这一点

angular中有一个内置的序列化器,它模仿了$.param():美元httpParamSerializerJQLike

如果您试图创建数据的序列化表示,如$.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 ); 
}

并将其用于数据序列化

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对象,并将其传递给$resource或$http,它应该工作正常。需要注意的是,要确保它是一个对象,而不是一个数组。

var badParam = {'name':'john',...}; // contains more properties
var goodParam = {name :'john',...}; // contains more properties

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