var vm = this;
vm.dt_data = [];
vm.item = {};
vm.edit = edit;
vm.dtOptions = DTOptionsBuilder.newOptions()
.withOption('initComplete', function() {
$timeout(function() {
$compile($('.dt-uikit .md-input'))($scope);
})
})
.withPaginationType('full_numbers')
.withOption('createdRow', function (row, data, dataIndex) {
$compile(angular.element(row).contents())($scope);
})
.withOption('ajax', {
dataSrc: function(json) {
json['draw']=1
json['recordsFiltered'] = json.records.length
json['recordsTotal'] =json.records.length
console.log(json)
return json.records;
},
url: 'http://localhost:808/sistemadrp/public/ws/usuarios',
type: 'GET',
})
//.withDataProp('records')
.withOption('processing', true)
.withOption('serverSide', true);
vm.dtColumns = [
DTColumnBuilder.newColumn('id').withTitle('Id'),
DTColumnBuilder.newColumn('usuario').withTitle('Usuario'),
DTColumnBuilder.newColumn('nombre').withTitle('Nombre'),
DTColumnBuilder.newColumn('email').withTitle('Email'),
DTColumnBuilder.newColumn('telefono').withTitle('Telefono'),
DTColumnBuilder.newColumn('estado').withTitle('Estado'),
DTColumnBuilder.newColumn('created_at').withTitle('Creado'),
DTColumnBuilder.newColumn(null).withTitle('Acciones').notSortable().renderWith(function(data,type,full){
vm.item[data.id] = data;
return ' <a href="#" data-uk-modal="{target:\'#modal_header_footer\'}" ng-click="showCase.edit(showCase.item[' + data.id + '])">'+
' <i class="md-icon material-icons md-bg-light-blue-900 uk-text-contrast"></i></a>'+
' <a href="#" data-uk-modal="{target:\'#modal_header_footer_eliminar\'}" ng-click="showCase.edit(showCase.item[' + data.id + '])">'+
' <i class="md-icon material-icons md-bg-red-900 uk-text-contrast"></i></a>';
})
];
表:
<div class="md-card-content" ng-controller="dt_default as showCase">
<table datatable="" dt-options="showCase.dtOptions" dt-columns="showCase.dtColumns" class="uk-table" cellspacing="0" width="100%">
</table></div>
我在这里给出的答案是使用$ compile已经按照这种方式工作
.withOption('createdRow', function (row, data, dataIndex) {
$compile(angular.element(row).contents())($scope);
})
现在点击按钮我甚至调用模态并命令对象使用ng-model
感谢您的帮助,它运作良好。
答案 0 :(得分:3)
编辑:添加了用于演示 $compile
的使用情况的代码段在html中,只有body
标签用于初始化应用程序,而div用于初始化控制器。
在foo
控制器中,两个链接创建为简单字符串,但分别有两个ng-click
,然后使用$ compile服务进行编译。然后将结果附加到div
id
parent
创建为jQlite对象(这里的重要方面!),所以当链接被点击时{{1}上的函数执行(见控制台)。这意味着AngularJS正确解释了已编译的html。
重要:这与您的代码之间的区别可能是您的ng-click
只是将参数作为简单的html节点而不是 jQuery / < em> jQlite 对象。如果情况你不能做你正在尝试这样做的事情。您可能需要为此找到解决方法。例如:您可以为renderWith
返回的对象的结果设置一个选择器(即:id
),然后以与我相同的方式设置 $ compile 该html节点显示在摘录中。
原帖
您应该使用$compile服务。像这样修改你的功能:
DTColumnBuilder
段的
function actionsHtml(data, type, full, meta){
vm.usuario[data.id] = data;
var html = ' <a href="#" data-uk-modal="{target:\'#modal_header_footer\'}" ng-click="showCase.edit(showCase.usuario[' + data.id + '])"><i class="md-icon material-icons md-bg-light-blue-900 uk-text-contrast"></i></a>'+
' <a href="#" data-uk-modal="{target:\'#modal_header_footer_eliminar\'}"><i class="md-icon material-icons md-bg-red-900 uk-text-contrast"></i></a>';
return $compile(angular.element(html))($scope);
}
&#13;
angular.module('myapp', [])
.controller('foo', function($scope, $compile) {
var html = "<a class='hand' ng-click='hello()'><strong>Hi</strong> <small>(Click Me and take a look at console)</small></a>" +
"<br/> <hr/>" +
"<a class='hand' ng-click='goodby()'><strong>Goodby</strong> <small>(Click Me and take a look at console)</small></a>";
/*
* important!! if you don't use the angular.element syntaxt below, and instead you just use
* 'document.getElementById('parent') = $compile(html)($scope)', for instance, it will be shown something like '[object], [object]'
*/
angular.element(document.getElementById('parent')).append($compile(html)($scope));
$scope.hello = function() {
console.log("Hi there!")
}
$scope.goodby = function() {
console.log("Goodby!")
}
});
&#13;
答案 1 :(得分:1)
对我来说,它看起来像是一个范围问题。 这意味着在运行时,单击该按钮时,它无法找到编辑功能。
如果您在vm.usario = {};
下面添加此行vm.edit = edit;
然后更改你的ng-click =&#34; showCase.edit(将是
ng-click="vm.edit( ...
然后按钮应该能够找到该功能。