Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在angularjs中转换$.param_Javascript_Jquery_Angularjs_Url_Param - Fatal编程技术网

Javascript 在angularjs中转换$.param

Javascript 在angularjs中转换$.param,javascript,jquery,angularjs,url,param,Javascript,Jquery,Angularjs,Url,Param,在使用JQuery之前,我使用它发送带有参数的URL window.location = myUrl + $.param({"paramName" : "ok","anotherParam":"hello"}); 但对于angularjS,这与工作方式不同 $scope.myButton = function() { $window.location.open = myUrl + $.param({"paramName" : "ok","anotherParam":"hello"});

在使用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中实现这一点


并将其用于数据序列化

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

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

AngularJs中有一个内置的序列化程序,它模仿$.param():

您可以插入并使用此函数:$httpParamSerializerJQLike()

您在这里想做什么?如下图所示,如果您想使用jquery函数,请访问www.test.com?option=ok添加jquery。否则,您需要使用老的javascript方法来完成。angular使用jquery lite-最终,当按钮被单击时,您可能需要一个angular指令来处理。我想您需要类似于
$location.path('xxurlxx')的东西
但我不确定该参数,因为我不清楚如何使用
选项
如何使用此函数??如果数据包含嵌套对象,此函数将不起作用,即:如果数据类似于{foo:[{id:1,val:'test'},{id:2,val:'test2'},{test test:'myTest}不重新发明轮子是行不通的。如果jQuery已经实现了这一点,请使用它。不要太害怕混合这些库。这是最好的答案。编写已经存在的代码不是一个好主意,..param()不包括在jQLite中:如果您仍然包括jQuery,这可能会起作用,因为angular将使用它,但对于纯angular(jQuery Lite),它抛出TypeError:angular.element.param不是一个函数,它不起作用<代码>未捕获类型错误:angular.element.param不是函数(…)我编辑了此答案,以避免jQuery lite包含
.param()
的错误信息。谢谢你的澄清@AlexRoss!请注意,
$httpParamSerializer
$httpParamSerializerJQLike
是可用的,因为Angular 1.4这应该是真正的答案
var badParam = {'name':'john',...}; // contains more properties
var goodParam = {name :'john',...}; // contains more properties