Я использую следующее с npm:
"dependencies": {
"angular": "1.6.4",
"datatables.net": "1.10.19",
"datatables.net-buttons": "1.5.3",
"datatables.net-buttons-dt": "1.5.3",
"angular-datatables": "0.6.2",
// and more that is not question related
}
Теперь, когда я создаю DataTable, как показано в примерах angular-datatables, все работает отлично.
Например:
vm.dtOptions = DTOptionsBuilder
.newOptions()
// data fetch and processing animation and ...
.withButtons([
'colvis',
'copy',
'print',
'excel',
'pdf',
{
text: 'Some button',
key: '1',
action: function (e, dt, node, config) {
alert('Button activated');
},
className: 'someCustomCssClass',
},
])
.withBootstrap();
vm.dtColumns = [
DTColumnBuilder.newColumn('id').withTitle('ID').withClass('text-danger'),
DTColumnBuilder.newColumn('firstName').withTitle('First name'),
DTColumnBuilder.newColumn('lastName').withTitle('Last name')
];
Теперь я хочу изменить настраиваемую кнопку "Некоторая кнопка".
Я хочу, чтобы у кнопки был собственный атрибут HTML.
Текущая кнопка отображается следующим образом:
<button class="dt-button someCustomCssClass ng-scope" tabindex="0" aria-controls="DataTables_Table_0" type="button">
<span>Some button</span>
</button>
Но у кнопки должен быть атрибут "доступ", чтобы скрывать/показывать кнопку в зависимости от роли пользователя.
Так должно быть, например:
<button access="ROLE_ADMIN" class="dt-button someCustomCssClass ng-scope" tabindex="0" aria-controls="DataTables_Table_0" type="button">
<span>Some button</span>
</button>
Но как я могу добавить к кнопке новый атрибут?
Добавить пользовательский класс CSS легко с помощью "className", но это совершенно новый атрибут?
Спасибо за помощь и
приветствия
ОБНОВЛЕНИЕ
В настоящее время я добавляю полностью пользовательскую кнопку, подобную этой:
var myEl = angular.element( document.querySelector( '.dataTables_wrapper > .dt-buttons' ) );
myEl.append('<button with all my needs></button>');
$compile(myEl.contents())(scope);
Это работает, но теперь я не могу использовать информацию DataTable, а сама интеграция очень плохая.
Кроме того, это обходной путь, а не хорошее решение!
Я действительно надеюсь, что init
, о котором упоминается @davidkonrad, может решить это.