让 yadcf(用于数据表)在 Angular 2 (jQuery 3) 中工作
Getting yadcf (for datatables) to work in Angular 2 (jQuery 3)
我一直在为 datatables 库使用很棒的插件 yadcf。我一直在 asp.net mvc 5 的视图中使用它,没有任何问题。
我们目前正在将应用程序迁移到 Angular 2,ASP.NET Web Api 提供数据。
我已将代码移到此处并进行了最小的更改,并且通过将对 datatables 库的引用放在index.html 托管 angular 应用程序的页面。
然后我 运行 数据tables 下面的初始化代码来自承载 table 的组件。
然而,每当我尝试对 yadcf.init 做同样的事情时,我得到:
Uncaught (in promise): TypeError: Cannot read property 'replace' of undefined
它崩溃了。
ngOnInit(){
this.table = $('#studyList')
.DataTable({
serverSide: true,
responsive: true,
processing: true,
ajax: {........
........
}
.........
});
// runs fine to here and datatables works when the following is commented out
// but crashes as soon as i try and initialise yadcf from
// from within the component as follows.
yadcf.init(this.table,
[
{
column_number: 5,
filter_type: 'multi_select',
select_type: 'select2',
data: [
{ label: 'Included', value: 1 },
{ label: 'Excluded', value: 2 },
{ label: 'Insufficiently Screened', value: 4 }
]
}
]);
// This causes "Uncaught (in promise): TypeError:
// Cannot read property 'replace' of undefined" error
}
真的不想在新应用程序中失去过滤功能,因此非常感谢您的帮助!
是否有一些关键可以使我缺少的 angular 2 正常工作?
编辑
看起来错误实际上是由使用 jquery 3(见下文)引起的。
我意识到错误与 angular 完全无关(它只是被 angular 重新抛出)!
我有一个不同版本的 jQuery(2.2.4 在原来的 MVC 应用程序中但 3.1.0 在我的 angular 应用的 index.html 中引用)
所以事实证明 yadcf 不能很好地与 jQuery 3.
具体在第一行内
yadcf.init(oTable, options_arg, params)
函数进行以下分配。
function init(oTable, options_arg, params) {
var instance = oTable.settings()[0].oInstance;
// ......
// it is assumed that variable instance has a property called selector
// but this is not the case in jquery 3 so all occurrences of
// "instance.selector" later in the function are undefined.
// ......
$(document).data(instance.selector + "_filters_position", params.filters_position);
if ($(instance.selector).length === 1) {
setOptions(instance.selector, options_arg, params);
initAndBindTable(instance, instance.selector, 0, oTable);
} else {
for (i; i < $(instance.selector).length; i++) {
$.fn.dataTableExt.iApiIndex = i;
selector = instance.selector + ":eq(" + i + ")";
setOptions(instance.selector, options_arg, params);
initAndBindTable(instance, selector, i, oTable);
}
$.fn.dataTableExt.iApiIndex = 0;
}
}
这意味着 yadcf 未初始化,因此稍后调用 yadcf.exFilterColumn(table_arg, col_filter_arr, ajaxSource)
时会抛出错误 Cannot read property 'replace' of undefined
。
关于 yadcf 中的 jQuery3 支持 - 您必须使用 yadcf - 0.9.0 (or the last beta version of 0.8.9, its also stated in the changelog file
我一直在为 datatables 库使用很棒的插件 yadcf。我一直在 asp.net mvc 5 的视图中使用它,没有任何问题。 我们目前正在将应用程序迁移到 Angular 2,ASP.NET Web Api 提供数据。
我已将代码移到此处并进行了最小的更改,并且通过将对 datatables 库的引用放在index.html 托管 angular 应用程序的页面。
然后我 运行 数据tables 下面的初始化代码来自承载 table 的组件。
然而,每当我尝试对 yadcf.init 做同样的事情时,我得到:
Uncaught (in promise): TypeError: Cannot read property 'replace' of undefined
它崩溃了。
ngOnInit(){
this.table = $('#studyList')
.DataTable({
serverSide: true,
responsive: true,
processing: true,
ajax: {........
........
}
.........
});
// runs fine to here and datatables works when the following is commented out
// but crashes as soon as i try and initialise yadcf from
// from within the component as follows.
yadcf.init(this.table,
[
{
column_number: 5,
filter_type: 'multi_select',
select_type: 'select2',
data: [
{ label: 'Included', value: 1 },
{ label: 'Excluded', value: 2 },
{ label: 'Insufficiently Screened', value: 4 }
]
}
]);
// This causes "Uncaught (in promise): TypeError:
// Cannot read property 'replace' of undefined" error
}
真的不想在新应用程序中失去过滤功能,因此非常感谢您的帮助!
是否有一些关键可以使我缺少的 angular 2 正常工作?
编辑
看起来错误实际上是由使用 jquery 3(见下文)引起的。
我意识到错误与 angular 完全无关(它只是被 angular 重新抛出)!
我有一个不同版本的 jQuery(2.2.4 在原来的 MVC 应用程序中但 3.1.0 在我的 angular 应用的 index.html 中引用)
所以事实证明 yadcf 不能很好地与 jQuery 3.
具体在第一行内
yadcf.init(oTable, options_arg, params)
函数进行以下分配。
function init(oTable, options_arg, params) {
var instance = oTable.settings()[0].oInstance;
// ......
// it is assumed that variable instance has a property called selector
// but this is not the case in jquery 3 so all occurrences of
// "instance.selector" later in the function are undefined.
// ......
$(document).data(instance.selector + "_filters_position", params.filters_position);
if ($(instance.selector).length === 1) {
setOptions(instance.selector, options_arg, params);
initAndBindTable(instance, instance.selector, 0, oTable);
} else {
for (i; i < $(instance.selector).length; i++) {
$.fn.dataTableExt.iApiIndex = i;
selector = instance.selector + ":eq(" + i + ")";
setOptions(instance.selector, options_arg, params);
initAndBindTable(instance, selector, i, oTable);
}
$.fn.dataTableExt.iApiIndex = 0;
}
}
这意味着 yadcf 未初始化,因此稍后调用 yadcf.exFilterColumn(table_arg, col_filter_arr, ajaxSource)
时会抛出错误 Cannot read property 'replace' of undefined
。
关于 yadcf 中的 jQuery3 支持 - 您必须使用 yadcf - 0.9.0 (or the last beta version of 0.8.9, its also stated in the changelog file