Я создаю портлет на Liferay 7.1, созданный с использованием шаблона blade-cli и npm-angular.Согласно моему требованию, следующая комбинация кажется идеальной:
Angular + JQuery Datatable (на платформе Liferay 7.1).
Я следовал коду согласно следующему репо: https://github.com/liorchamla/angular-datatables-from-scratch
Я могу успешно построить и развернуть проект, но затем, когда я пытаюсь зарегистрировать datatable () в объекте таблицы jquery, я получаю следующую ошибку в chrome devtools, но я вижу данные в таблице HTML(обычная таблица HTML без функций с данными):
core.umd.js:1487 ERROR TypeError: table.DataTable is not a function
at SafeSubscriber._next (app.component.ts:32)
at SafeSubscriber.__tryOrUnsub (Subscriber.ts:258)
at SafeSubscriber.next (Subscriber.ts:208)
at Subscriber._next (Subscriber.ts:139)
at Subscriber.next (Subscriber.ts:99)
at MapSubscriber._next (map.ts:83)
at MapSubscriber.Subscriber.next (Subscriber.ts:99)
at FilterSubscriber._next (filter.ts:96)
at FilterSubscriber.Subscriber.next (Subscriber.ts:99)
at MergeMapSubscriber.notifyNext (mergeMap.ts:154)
Я проверил следующие пункты:
- Тот же код отлично работает на созданном автономном угловом коде (без Liferay)использование angular-cli.
- При отладке кода на сервере Liferay я вижу, что у меня есть объект jquery при вызове $ ("table") в приведенном ниже фрагменте, но код завершается ошибкой с указанной выше ошибкой при вызовеdatatable () для того же объекта.
====
ngOnInit(){
this.http.get('https://5a5a9e00bc6e340012a03796.mockapi.io/clients')
.subscribe((data: any[]) => {
this.clients = data;
this.chRef.detectChanges();
const table: any = $('table'); // we have the jquery obj here
this.dataTable = table.DataTable(); // error here
});
}
====
На вкладке сети chrome, я вижу, что версия jquery (3.3.1) правильно загружена с датируемым 1.10.19 (как и ожидалось).
Примечание: Liferay 7.1 также загружает jquery 3.3.1 изнутри, и согласно вкладке сети он загружается до загрузки моей версии jquery. Части package.json для справки:
"dependencies": {
"@angular/core": "^5.0.0",
"@types/datatables.net": "^1.10.14",
"@types/datatables.net-buttons": "^1.4.0",
"@types/datatables.net-colreorder": "^1.4.0",
"@types/datatables.net-select": "^1.2.4",
..
"datatables.net": "^1.10.19",
"datatables.net-bs4": "^1.10.19",
"datatables.net-buttons": "^1.5.4",
"datatables.net-buttons-bs4": "^1.5.4",
"datatables.net-colreorder": "^1.5.1",
"datatables.net-colreorder-bs4": "^1.5.1",
"datatables.net-responsive": "^2.2.3",
"datatables.net-responsive-bs4": "^2.2.3",
"datatables.net-select": "^1.2.7",
"datatables.net-select-bs4": "^1.2.7",
"datatables.responsive.typings": "^1.0.3",
"jquery": "^3.3.1",
}
"devDependencies": {
..
"@types/jquery": "^3.3.29",
"typescript": "2.4.2",
"liferay-npm-bundler": "^2.0.0",
..
}
Я застрял здесь, поскольку я пробовал много разных подходов, но ни один из них не работал.
Кто-нибудь успешно реализовал комбинацию (angular + jquery datatable + liferay 7.1)?
Будем весьма благодарны за любые предложения или указатели.
Примечание. Поскольку это решение на основе Liferay, у меня нет возможности поделиться примером, чтобы увидеть мою проблему.Но я мог бы проверить любое предложение, если потребуется.Автономная версия точно такая же, как в вышеупомянутом репо, и работает так же, как показано здесь:
https://liorchamla.github.io/angular-datatables-from-scratch/