Laravel app.js Конфликты с таблицами данных - PullRequest
0 голосов
/ 07 июня 2018

Я использую таблицы данных в проекте Laravel.Но похоже, что laravels 'app.js конфликтует с datatables.min.js. Я получаю эту ошибку в консоли.

Uncaught TypeError: $(...).DataTable is not a function

Если я удаляю app.js из головы, все работает относительноdatatables, но затем загружаются выпадающие меню и некоторые другие связанные с js вещи, очевидно, перестает работать, потому что я удаляю app.js. Как я могу решить эту проблему, включив оба параметра в head section?

UPDATE: Здесьэто головной раздел моего приложения Laravel.Последняя версия Laravel 5.6

<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="csrf-token" content="Yhn7OFsFoV2qKhwsF7URC9GzjwNIb8muUT2u5kkD">
<title>Application</title>
<script src="http://127.0.0.1:8000/js/app.js" defer></script>
<script src="http://127.0.0.1:8000/js/datatables.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function(){
$('#users').DataTable({
  processing: true,
  serverSide: true,
  searching: true,
  filter: true,
  ajax: 'http://127.0.0.1:8000/api/users/data',
  columnDefs: {
    targets: [-1],
    visible: false,
    searchable: true,
  },
  columns: [
      {data: 'id', name: 'id'},
      {data: 'name', name: 'name', sortable: false},
      {data: 'email', name: 'email', sortable: false},
      {data: 'role', name: 'role'},
      {data: 'created_at', name: 'created_at'},
  ],
  initComplete: function() {
    this.api().columns([2]).every(function () {
      var column = this;
      var input = document.createElement("input");
      input.classList.add('form-control');
      input.setAttribute('placeholder', 'search by email..');
      input.setAttribute('name', 'search-email');

      $(input).appendTo($(column.header()).empty())
          .on('change', function () {
            column.search($(this).val(), false, false, true).draw();
          });

    });
    $('.dataTables_filter input[type="search"]').addClass('form-control');
  }
 });
});
</script>

Ответы [ 5 ]

0 голосов
/ 29 июня 2019

Включите атрибут defer в ваш <script src="{{ asset('js/datatables.min.js') }}" defer></script>

Проблема в том, что скрипты загружаются не в правильном порядке.Отложить запуск скрипта после загрузки документа

0 голосов
/ 21 января 2019

добавить атрибут defer к тегу скрипта

<script src="http://127.0.0.1:8000/js/datatables.min.js" type="text/javascript" ***defer***></script>
0 голосов
/ 07 июня 2018

Это потому, что jquery доступен через app.js, и вы, вероятно, снова связали jquery для datatable.Попробуйте удалить ссылку для jquery, и она должна работать.

0 голосов
/ 12 октября 2018

вы можете заменить JS и CSS по умолчанию для Bootstrap.Загрузочный JavaScript будет работать так же, как и App.js.Еще одним преимуществом замены laravel по умолчанию является то, что Bootstrap позволит вам создавать админ-шаблоны, например страницы. Это сработало для меня

0 голосов
/ 07 июня 2018

Во-первых, вы не указали версию Laravel, поэтому я предполагаю, что это последний стабильный выпуск.

Во-вторых, вы не сказали, как устанавливали таблицы данных, я предполагаю, что вы просто включили минимизированный источник вручную.

Согласно документации вы сможете установить файл datatables через package.json npm или yarn, в зависимости от ваших предпочтений).

Для ясности, пакет datatables доступен в репозитории NPM: https://datatables.net/download/npm

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...