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

时间:2017-05-11 13:31:36

标签: javascript angularjs datatables

我现在已经遇到过几次这样的问题,而不是创造一个“黑客”工作我觉得最好问一下有没有更好的方法来处理这样的情况。

我正在使用角度数据表,在数据表上我们有一个带有可点击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 +')我认为以这种方式附加对象是在它显示的html中奇怪地呈现它作为showModal([Object object])有没有办法让它工作当前点击在这个链接上什么都不做,但是作为一个int传入id可以提高模态。

作为更类似的经验,我在量角器测试中也发现了同样的问题。话说:

expect('ID-'+id).toEqual(ID-123456);

沿着ID- [Object object]的行产生错误不等于ID-123456。

我是否有一些字符串连接问题,是否有办法阻止它?

谢谢!

1 个答案:

答案 0 :(得分:0)

纯粹的机会我找到了解决这个问题的方法。基本上归结为动态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;
}

希望这有助于某人。