angularjs-directive - Angular Js Ng-Click中的JQuery数据表不起作用?
问题描述
我有一个 DataTable,我正在使用 Angular Js 加载它,我创建了一个指令并将我的 DataTable 包装在这个指令中,一种在指令中包装 JQuery 插件的常用方法,以便它可以存在于Angular Digest Cycle
. 但是ng-click
按钮上的那个和来自数据表的那个render Function of column
不是clickable
(不工作,Angular 没有编译它)。有什么办法可以做到Clickable
。我知道我们用来在数据表{{}} with ng-repeat
中填充数据的方法。我正在寻找一个directive way
,所以你可以告诉我是什么阻止了 ng-click 工作或如何使我的指令正确!请坚持指导性方法。代码如下。
App.directive('jqtable', function () {
return {
restrict: 'E, A, C',
link: function (scope, element, attrs, controller) {
var dataTable = element.dataTable(scope.options);
scope.$watch('options.data', handleModelUpdates, true);
function handleModelUpdates(newData) {
var data = newData || null;
if (data) {
dataTable.fnClearTable();
dataTable.fnAddData(data);
}
}
},
scope: {
options: "="
}
};
});
这是我的控制器:-
$scope.options = {
aoColumnDefs: [{
"bSortable": true,
"aTargets": [ 1],
"render": function ( data, type, full, meta ) {
if(meta.col==1){
return data+" <a class='btn btn-sm btn-default' ng-click='showalert()' >Click me </a>"
}
}
}],
bJQueryUI: true,
bDestroy: true,
data:$scope.data
};
$scope.showalert=()=>
{
alert("Angular Compiled the Html");
}
解决方案
Angular 不知道您已将元素注入 DOM。你必须$compile
每一行。你可以在rowCallback
. 由于 DataTables 可能会在表被过滤、排序或页面更改时注入新行,因此您可以添加一个compiled
标志来防止行被 $compiled 多次:
$scope.options = {
rowCallback: function(row) {
if (!row.compiled) {
$compile(angular.element(row))($scope);
row.compiled = true;
}
}
...
}
推荐阅读
- javascript - React.js 拖动事件在更改状态并引用新组件以及旧组件时导致内存泄漏
- javascript - 如何使用 javascript 进行表格计算和迭代?
- xml - 如果属性不存在,则获取节点值
- docker - 错误:无法运行程序“docker”(在目录“/var/jenkins_home/workspace/docker-springboot”中):错误=2,没有这样的文件或目录
- python - Python + Selenium + Chromium 禁用通知?
- python - numpy :在围绕数组边界循环时对数组进行切片(甜甜圈的拓扑)
- swift - Firestore 中针对基于位置的应用程序的安全数据模型是什么?
- python - 使用 FastAPI 和 Gunicorn 以高吞吐量将模型部署为服务
- javascript - 如何使用Javascript检查数组是否包含两个值
- javascript - AJAX POST 请求异常