转换成美元.angularjs中的参数
Convert $.param in angularjs
在我使用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()
相关文章:
- AngularJS:我可以跳过函数参数回调吗
- 如何将参数传递到angularJs中的工厂
- EJS中的Angularjs-Ui路由器参数
- 如何在angularjs中传递对象字段作为指令参数
- AngularJS-参数'菜单Ctrl'不是函数,未定义
- angularjs-ui路由器父状态,参数加载在子状态之后
- Angularjs-ui路由器使用不同的参数进入相同的状态
- AngularJS-点击对象,访问它's ID&以该ID作为参数激发函数
- 通过匹配 - Javascript/AngularJS 中的参数来查找对象
- 如何在 AngularJS 中的过滤器中使用参数
- 在 angularjs 的 ga 命令中设置动态参数
- 如何使用angularjs服务将表单参数传递给Rest
- 限制与AngularJS状态匹配的动态URL参数的最佳方式
- Angularjs-如何从URL获取参数
- AngularJS-如何在ng中继器中调用以项值为参数的控制器函数
- Angularjs将函数从控制器传递到指令(或从指令调用控制器函数)-带参数
- 无法使用angularjs$http请求将参数发送到服务器操作方法
- AngularJS'ng:areq错误参数"{controller}不是函数“;,CodeIgnite
- AngularJS tokenWrapper-错误的回调参数
- 使用 $state 参数 AngularJS 发送数据