[英]Pass object to javascript function in dynamically generated html
我已经在这方面遇到了几次问题,而不是绕开我的工作,我认为最好问问是否有更好的方法来处理这种情况。
我正在使用角度数据表,在该数据表上,我们有一个带有可点击ID的单元格,它会显示一个引导程序模态。
我想在ng-click动作中传递该行中项目的完整对象,但是它似乎不起作用,我认为这是由于该对象笨拙地传递给该函数而引起的,该函数是一些动态生成的html:
数据表:
$scope.dtColumns = [DTColumnBuilder.newColumn('Id').withTitle('Id').renderWith(CommonService.renderId),
DTColumnBuilder.newColumn('status').withTitle('Status').renderWith(CommonService.renderStatus),
DTColumnBuilder.newColumn('description').withTitle('Description').renderWith(CommonService.renderLength),
DTColumnBuilder.newColumn('rating').withTitle('Rating').withOption('type', 'rating'),
DTColumnBuilder.newColumn('date').withTitle('Date'),
DTColumnBuilder.newColumn("category").withTitle('Category').renderWith(CommonService.renderLength),
DTColumnBuilder.newColumn("subcategory").withTitle('Sub Category').renderWith(CommonService.renderLength)];
CommonService:
function renderId(data, type, full, meta){
var render = "ID-"+data;
//'hack' function to store object for later lookup
setObjectForModal(full);
//Dynamically generated html to apply link on id with ng-click function which passes in 'full' object
var html = ' <span class="link" ng-click="showModal('+full+')" > ' + render + ' </span> ';
return html;
}
如您所见,showModal('+ full +')我相信以这种方式附加对象会在显示为showModal([Object object])的html中奇怪地渲染它,因此有任何方法可以使它正常工作,因为当前单击此链接什么都不做,但是将id传递为int会提高模态罚款。
作为进一步的类似经验,我在量角器测试中也注意到了相同的问题。 他说:
expect('ID-'+id).toEqual(ID-123456);
沿着ID- [Object object]不等于ID-123456产生错误。
我是否引起某些字符串连接问题,并且有办法防止它发生?
谢谢!
碰巧的是,我找到了解决该问题的方法。 基本上归结为动态html渲染,要传递上述对象,您必须使用JSON.Stringify()将[Object object]转换为json字符串,您可以读取属性。
function renderId(data, type, full, meta){
var render = "ID-"+data;
//'hack' function to store object for later lookup
setObjectForModal(full);
//Dynamically generated html to apply link on id with ng-click function which passes in 'full' object
var html = ' <span class="link" ng-click="showModal('+ JSON.stringify(full) +')" > ' + render + ' </span> ';
return html;
}
希望这对某人有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.