繁体   English   中英

将对象传递给动态生成的html中的javascript函数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM