2017-01-30 5 views
3

Я новичок в Vue.js и DataTable, и я надеюсь, что у некоторых из вас есть опыт их интеграции. может кто-то сказать наверняка, что это хороший способ интегрировать Vue.js & DataTable (jquery plugin)? это работает просто отлично, но я хочу быть уверен, что это правильный путь ... спасибо :)с использованием Vue.js & DataTable (jquery plugin)

\t var app = new Vue({ 
 

 
\t  el: '#root', 
 

 
\t \t data(){ 
 
\t \t  return{ 
 
       employees: [ 
 
        { 
 
         Name: 'Tiger Nixon', 
 
         Position: 'System Architect', 
 
         Office: 'tokyo', 
 
         Age: '61', 
 
         StartDate: '2011/04/25', 
 
         Salary: '$320,800', 
 
        }, 
 
       ], 
 
       name: '', 
 
       position: '', 
 
       office: '', 
 
       age: '', 
 
       startDate: '', 
 
       salary: '', 
 
       dataTable: null 
 
      } 
 
\t \t }, 
 

 
\t \t methods: { 
 
\t \t  addEmployee(){ 
 
\t \t \t this.dataTable.row.add([ 
 
\t \t \t  this.name, 
 
\t \t \t  this.position, 
 
\t \t \t  this.office, 
 
\t \t \t  this.age, 
 
\t \t \t  this.startDate, 
 
\t \t \t  this.salary, 
 
\t \t \t ]).draw(false); 
 
\t \t  } 
 
\t \t }, 
 

 
\t \t mounted(){ 
 
\t \t  this.dataTable = $('#data_table').DataTable({ 
 

 
\t \t  }); 
 
\t \t } 
 

 

 
\t })
#root{ 
 
    text-align: center; 
 
} 
 

 
.btn{ 
 
    margin-bottom: 30px; 
 
}
<div id="root" class="container"> 
 
\t <form class="form-inline"> 
 
\t \t <div class="form-group"> 
 
\t \t \t <label for="name">Name:</label><br> 
 
\t \t \t <input type="text" v-model="name" class="form-control" id="name"> 
 
\t \t </div> 
 
\t \t <div class="form-group"> 
 
\t \t \t <label for="position">Position</label><br> 
 
\t \t \t <input type="text" v-model="position" class="form-control" id="position"> 
 
\t \t </div> 
 
\t \t <div class="form-group"> 
 
\t \t \t <label for="office">Office</label><br> 
 
\t \t \t <input type="text" v-model="office" class="form-control" id="office"> 
 
\t \t </div> 
 
\t \t <div class="form-group"> 
 
\t \t \t <label for="age">Age</label><br> 
 
\t \t \t <input type="text" v-model="age" class="form-control" id="age"> 
 
\t \t </div> 
 
\t \t <div class="form-group"> 
 
\t \t \t <label for="Start_date">Start Date</label><br> 
 
\t \t \t <input type="text" v-model="startDate" class="form-control" id="start_date"> 
 
\t \t </div> 
 
\t \t <div class="form-group"> 
 
\t \t \t <label for="salary">Salary</label><br> 
 
\t \t \t <input type="text" v-model="salary" class="form-control" id="salary"> 
 
\t \t </div><br><br> 
 
\t \t <button type="button" @click="addEmployee" class="btn btn-primary">Submit</button> 
 
\t </form> 
 
\t <table id="data_table" class="display" cellspacing="0" width="100%"> 
 
\t \t <thead> 
 
\t \t <tr> 
 
\t \t \t <th>Name</th> 
 
\t \t \t <th>Position</th> 
 
\t \t \t <th>Office</th> 
 
\t \t \t <th>Age</th> 
 
\t \t \t <th>Start Date</th> 
 
\t \t \t <th>Salary</th> 
 
\t \t </tr> 
 
\t \t </thead> 
 
\t \t <tbody> 
 
\t \t <tr v-for="employee in employees"> 
 
\t \t \t <td>{{ employee.Name }}</td> 
 
\t \t \t <td>{{ employee.Position }}</td> 
 
\t \t \t <td>{{ employee.Office }}</td> 
 
\t \t \t <td>{{ employee.Age }}</td> 
 
\t \t \t <td>{{ employee.StartDate }}</td> 
 
\t \t \t <td>{{ employee.Salary }}</td> 
 
\t \t </tr> 
 
\t \t </tbody> 
 
\t </table> 
 
</div> 
 

 
<link rel="stylesheet" type="text/css" href="//cdn.datatables.net/1.10.13/css/jquery.dataTables.css"> 
 
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> 
 

 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 
 
<script type="text/javascript" charset="utf8" src="//cdn.datatables.net/1.10.13/js/jquery.dataTables.js"></script> 
 
<script src="https://unpkg.com/[email protected]/dist/vue.js"></script>

ответ

1

Я предпочитаю альтернативы для таблиц с vuejs. Одним из них является компонентом из ratiw https://github.com/ratiw/vuetable-2-tutorial/blob/master/doc/README.md

Довольно быстро начать и легко интегрируется с бутстрапом или семантической структурой пользовательского интерфейса. Также есть очень удобные настраиваемые поля сортировки и поиск, а также получение данных из api, но для этой части требуется конкретный формат ответа на данные из вашего api, и если у вас нет большого контроля над этим, сложнее реализовать разбиение на страницы, например.

Другой вариант: https://github.com/matfish2/vue-tables-2. Я нашел это труднее начать, потому что ему нужна некоторая установка jsx, но она структурирована лучше, чем первая.

UPDATE: Vue столы-2 в настоящее время обслуживает предкомпилированным и не требует каких-либо преобразований или загрузчиков

Честно говоря, я предпочел бы один из вариантов сверху или, если вы найдете еще один в виде компоненты на awesome-vue (список компонентов vue на github). Используя такие пользовательские компоненты, вы избавляетесь от 2-х библиотек (jquery и datatables), и они прекрасно играют с реактивной природой vue.

Если вы не нуждаетесь в экспорте в формате pdf, экспортируете стили или причудливые печатные материалы, тогда я не понимаю, почему вы должны использовать datatables.

+0

спасибо за ответ, но мне нужно экспортировать файлы (excel и т. Д.), А документация и инструменты jQuery DataTable больше, чем любая другая библиотека или фреймворк, поэтому мне бы очень хотелось интегрировать Vue.js с jQuery DataTable для передовой компонентной технологии Vue и мощного jQuery DataTable для использования высококачественных функций таблицы. Ответ, который я ищу, является подтверждением для моего примера Vue.js & DataTable (jQuery plugin) выше и некоторых хороших рекомендаций по внедрению. .. спасибо :) –

+0

Кажется мне до сих пор. Пока это прямолинейно и легко понять, это прекрасно. Я бы предложил пару поправок относительно нахождения таблицы. Либо использовать '$ refs' вместо id, либо генерировать уникальный идентификатор (например, текущую дату) ' this.tableId = new Date(). GetTime(). ToString() 'в созданном крюке и иметь' ' Это гарантирует, что вы можете иметь столько таблиц, сколько пожелаете на странице, без проблем с выбором идентификатора. Также вам приходится иметь дело с обновлениями/изменениями. Кроме того, мне кажется замечательно –

+0

спасибо большое :) –