2016-07-19 14 views
4

Ich möchte die DataTable in meiner Angular 2 App verwenden. Aber das funktioniert nicht. In Angular 2 ist es nicht möglich, ein Skript-Tag in Vorlagen einzufügen. Weißt du wie ich das machen kann? Ich denke, ich muss einige Änderungen an den Systemen vornehmen.Wie verwendet man DataTable in Angular 2

list.html:

<table id="example" class="display" cellspacing="0" width="100%"> 
     <thead> 
      <tr> 
       <th>Name</th> 
       <th>Position</th> 
       <th>Office</th> 
       <th>Age</th> 
       <th>Start date</th> 
       <th>Salary</th> 
      </tr> 
     </thead> 
     <tfoot> 
      <tr> 
       <th>Name</th> 
       <th>Position</th> 
       <th>Office</th> 
       <th>Age</th> 
       <th>Start date</th> 
       <th>Salary</th> 
      </tr> 
     </tfoot> 
     <tbody> 
       <tr> 
       <td>Gavin Cortez</td> 
       <td>Team Leader</td> 
       <td>San Francisco</td> 
       <td>22</td> 
       <td>2008/10/26</td> 
       <td>$235,500</td> 
      </tr> 
      <tr> 
       <td>Martena Mccray</td> 
       <td>Post-Sales support</td> 
       <td>Edinburgh</td> 
       <td>46</td> 
       <td>2011/03/09</td> 
       <td>$324,050</td> 
      </tr> 
     </tbody> 
    </table> 

meine Komponente:

... 
declare var jQuery:any; 
.. 
ngOnInit():any{ 
     console.log("Augerufen"); 
     jQuery('#example').DataTable(); 
    } 
... 

In meiner index.html habe ich die erforderlichen libaries hinzugefügt:

<!-- Bootstrap Core CSS --> 
    <link href="css/bootstrap.min.css" rel="stylesheet"> 
    <link href="css/jquery.dataTables.min.css" rel="stylesheet"> 
<!-- jQuery --> 
    <script src="js/jquery.js"></script> 
    <script src="js/jquery.dataTables.min.js"></script> 
    <!-- Bootstrap Core JavaScript --> 
    <script src="js/bootstrap.min.js"></script> 

Vielen Dank im Voraus!

+0

Was funktioniert nicht? Es ist nicht klar, was Sie versuchen, der Code, den Sie zur Verfügung gestellt haben, ist der Demo-Code, und es funktioniert gut. Warum verwenden Sie jQuery auch, um Änderungsereignisse mit eckigen zu behandeln? – Pogrindis

+0

Ich möchte die Tabelle filtern und mit DataTables können Sie dies leicht tun. Ich habe den Code in den index.html es funktioniert. Aber wenn ich emedded test.html benutze, führt es den jQuery Code nicht aus. Ich habe es auch mit window.alert ("test") versucht. Ereignis, das nicht funktioniert – hamras

+0

Ok Es ist nicht möglich, ein Skript-Tag in der Vorlage hinzuzufügen. Angular 2 löscht es – hamras

Antwort

5

Sie können eine Direktive für DataTable erstellen und dann die Direktive für Ihre Komponente verwenden.

some wie folgt aus:

import {Directive, ElementRef} from '@angular/core'; 
import {Input, OnInit}   from '@angular/core'; 


import { JqueryDataTableEvent } from './jquery-datable-event'; 
import 'jquery.dataTables'; 

declare var jQuery:any; 

@Directive({ 
    selector: '[jqueryDatatable]' 
}) 

export class JqueryDatatableDirective implements OnInit { 
    private _datatable : any; 

    @Input() 
    jqueryDatatable: any; 

    @Input() 
    dataTableEvents: JqueryDataTableEvent[]; 

    constructor(private _element: ElementRef) {} 

    ngOnInit() { 
     this.applyOptions(); 
     this.applyEvents(); 
    } 

    applyOptions() 
    { 
     if (!this.jqueryDatatable) 
      console.error("Empty options array was passed to initialize jqueryDatatable."); 

     this._datatable = jQuery(this._element.nativeElement).DataTable(this.jqueryDatatable || {}); 

    } 

    applyEvents() { 
     this.dataTableEvents.map((event)=> { 
      this._datatable.on(event.eventName, event.selector, event.callback) 
     }); 
    } 
} 

dieses Beispiel könnte verbessert werden, aber für die Grundausstattung ist es ok.

+0

Können Sie ein vollständiges Beispiel geben? – DarioN1

+2

@ DarioN1 hier ist ein schnelles Beispiel mit der Datentabelle als Richtlinie - [https://plnrkr.co/edit/t0Zwc3AtQTt98XvIirZ9?p=preview](https://plnr.co/edit/t0Zwc3AtQTt98XvIirZ9?p=preview) –