Angularjs ng单击“不使用Datatable和Angular Js”

Angularjs ng单击“不使用Datatable和Angular Js”,angularjs,datatable,Angularjs,Datatable,我读过几个类似的问题,但在这个问题上没有一个对我有用。我正在使用laravel datatable和angular js。但“ng click”不适用于动态生成的数据表按钮。我读过$compile,但不知道如何用表实现它。我是个新手 当我点击按钮时,什么也没发生 app.controller('myController', ['$scope','$compile', function($scope, $compile) { $('#stafftbl').DataTable( { p

我读过几个类似的问题,但在这个问题上没有一个对我有用。我正在使用laravel datatable和angular js。但“ng click”不适用于动态生成的数据表按钮。我读过$compile,但不知道如何用表实现它。我是个新手

当我点击按钮时,什么也没发生

app.controller('myController', ['$scope','$compile', function($scope, $compile) {

$('#stafftbl').DataTable( {
      paging: true,
      "ordering": true,
      "searching": true,
      "bInfo" : true,
      deferRender: true,
      ajax: 'get_staffsalary',
      columns: [
          { data: 'staff_num', name: 'staff_num'},
          { data: 'staffname ', name: 'staffname' },
          { data: 'salary', name: 'salary' },
          { data: 'date_effected', name: 'date_effected' },
          { data: 'updated_at', name: 'updated_at' },
          { data: null, render: function (data, type, full) {
                  return '<button class="btn btn-xs btn-primary" ng-click="update('+full.id+')">Update Salary</button> ';
          }},

      ],

  });

   $scope.update= function (id) {
        alert(id)
    }
 }]);
app.controller('myController',['$scope','$compile',函数($scope,$compile){
$('#stafftbl')。数据表({
是的,
“排序”:正确,
“搜索”:没错,
“宾福”:没错,
是的,
阿贾克斯:“获得员工工资”,
栏目:[
{数据:'staff_num',名称:'staff_num'},
{数据:'staffname',名称:'staffname'},
{数据:'salary',名称:'salary'},
{数据:'生效日期',名称:'生效日期'},
{数据:'updated_at',名称:'updated_at'},
{data:null,render:function(数据,类型,完整){
返回“更新薪资”;
}},
],
});
$scope.update=函数(id){
警报(id)
}
}]);

请提供相关帮助?

是的,您需要使用$compile,这是正确的

在动态添加包含angular属性的html之后,就像处理数据表一样,您必须调用$compile,以便angular能够获取属性

您需要在$scope之后立即将$compile服务注入控制器。然后,在添加HTML之后,您需要编译新DOM,并通过在控制器的上下文中调用$compile(new_HTML)($scope)将其链接到作用域


参考参考

我用@MJL的答案解决了它。这是完整的代码块,它可能会帮助其他人

app.controller('myCtrl', ['$scope','$compile', function($scope, $compile) {

var table = $('#stafftbl').DataTable( {
    processing: false,
    serverSide: false,
    deferRender: true,
    ajax: 'get_staffsalary',
    columns: [
        { data: 'staff_num', name: 'staff_num'},
        { data: 'salary', name: 'salary' },
        { data: 'date_effected', name: 'date_effected' },
        { data: 'updated_at', name: 'updated_at' },
        { data: null, render: function (data, type, full) {
            return '<button class="btn btn-xs btn-primary text-size-small" ng-click="clickme()>Update</button> ';
        }},

    ],
    "createdRow": function ( row, data, index ) {
        $compile(row)($scope);  //add this to compile the DOM
    }

})

 $scope.clickme = function () {
   alert('clicked me')
}
}]);
app.controller('myCtrl',['$scope','$compile',函数($scope,$compile){
变量表=$('#stafftbl')。数据表({
处理:假,
服务器端:错,
是的,
阿贾克斯:“获得员工工资”,
栏目:[
{数据:'staff_num',名称:'staff_num'},
{数据:'salary',名称:'salary'},
{数据:'生效日期',名称:'生效日期'},
{数据:'updated_at',名称:'updated_at'},
{data:null,render:function(数据,类型,完整){

return“您必须在问题中写入错误。”not work“可能有很多可怕的原因。我已编辑并将其添加到问题中。当我单击按钮时,不会发生任何事情。或等的可能副本等。我在何处添加此代码?$compile(new_html)($scope)问题中的第一个代码块从何处调用?如果它是在控制器中调用的,您应该能够在DataTable的回调中调用$compile。我不熟悉您正在使用的DataTable插件,但它应该有一个用于添加html时的回调选项。我现在已将代码移动到控制器并进行编辑我也问了这个问题。我把$compile(new_html)($scope)称为哪里?我已经正确地添加了$compile(new_html)($scope),现在它可以正常工作了。我需要发布新代码作为答案吗?很高兴听到你让它工作了:)是的,添加您的解决方案作为答案。这可能会帮助其他人。如果我的答案对您有任何帮助,我将非常感谢您的支持。谢谢。@PrashantPokhriyal,问题应该结束,前面几个问题的答案都是1:1,上面的答案也是。@PrashantPokhriyal,问题应该结束,前面几个问题的答案都是1:1s、 上面的答案也是如此。