在数据表的渲染列中使用ng-click

时间:2017-10-06 04:23:45

标签: javascript jquery angularjs datatable

我在AngularJS中使用了一个普通的Datatable(不使用任何Angular-Datatable库)。到目前为止,一切似乎都很好,除了一件事。

我有这个数据表:

$scope.siInfoTable = $('#siInfoTable').DataTable({
            'columns': [
                {
                    "render": function (data, type, row, meta) {
                        data =  '<button class="btn btn-primary btn-sm" ng-click="test()">TEST</button>';
                        return data;
                    }
                }]
        });

这是在$scope.load方法内运行,并在呈现页面之前加载。当用户单击数据表中的呈现按钮时,它似乎无法识别ng-click指令。

这边有办法吗?

2 个答案:

答案 0 :(得分:1)

我建议您使用 angular-datables 角度库,否则将会发生什么。

  1. 您的控制器或指令中的更改不会反映在输出HTML中。
  2. 可能会反复抛出一些错误。
  3. 减少您面临的问题。这是一个使用角度数据表的片段。

    取自Angular Datatables Documentation

        angular.module('datatablesSampleApp', ['datatables', 'datatables.buttons']).
        controller('sampleCtrl', function($scope, DTOptionsBuilder) {
            $scope.dtOptions = DTOptionsBuilder.newOptions()
              .withPaginationType('full_numbers') 
              .withDisplayLength(2)
              .withOption('order', [1, 'desc']).withButtons([{
            text: '<button class="btn">Some button</button>',
            key: '1',
            action: function(e, dt, node, config) {
              alert('Button activated');
            }
          }]);
        });
    <!DOCTYPE html>
    <html>
    
    <head> 
        <link rel="stylesheet" href="//cdn.datatables.net/1.10.1/css/jquery.dataTables.css" />
        <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/datatables/1.10.9/js/jquery.dataTables.min.js"></script>
    <script src="https://cdn.datatables.net/buttons/1.2.2/js/dataTables.buttons.min.js"></script>
        <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.5/angular.min.js"></script>
        <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/angular-datatables/0.6.2/angular-datatables.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular-datatables/0.6.2/plugins/buttons/angular-datatables.buttons.min.js"></script>
        <script src="script.js"></script>
    </head>
    
    <body ng-app="datatablesSampleApp">
        <div ng-controller="sampleCtrl">
            <table datatable dt-options="dtOptions">
                <thead>
                    <tr>
                        <th>ID</th>
                        <th>First name</th>
                        <th>Last name</th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td>1</td>
                        <td>Foo</td>
                        <td>Bar</td>
                    </tr>
                    <tr>
                        <td>123</td>
                        <td>Someone</td>
                        <td>Youknow</td>
                    </tr>
                    <tr>
                        <td>987</td>
                        <td>Iamout</td>
                        <td>Ofinspiration</td>
                    </tr>
                </tbody>
            </table>
        </div>
    </body>
    
    </html>

答案 1 :(得分:0)

$尝试在将html影响到数据之前编译你的html,将$ compile注入你的控制器

app.controller('mycontroller', ['$compile', ..., function($compile, ...)

然后编译你的html

data =  $compile('<button class="btn btn-primary btn-sm" ng-click="test()">TEST</button>')($scope);