2016-02-23 19 views
6

C'è un modo per includere script JS di terze parti all'interno di un componente Angular2 invece di includerlo in index.html?angular2: compresi gli script js di terze parti nel componente

Ho un componente tabella che include i dataTable. È l'unico componente che ha bisogno di dataTables js/css include. Sarebbe bello se potessi mantenere il mio index.html più pulito. Il decoratore di componenti ti consente di specificare i file CSS.

Ho provato a spostare i tag di script all'interno del mio componente html, ma non sembra funzionare.

+0

sì, si può caricare di terze parti 'css' nel componente richiesto solo in styleUrls. non so di file '.js' –

+0

dup di http://stackoverflow.com/questions/34140065/script-tag-in-angular2-template-hook-when-template-dom-is-loaded –

+0

Hai considerato PrimeNG DataTable, è un componente nativo. http://www.primefaces.org/primeng/#/datatable –

risposta

10

I tag di script nei modelli di componenti vengono rimossi. Una soluzione è quella di creare il tag script in modo dinamico in ngAfterViewInit()

Vedi anche https://github.com/angular/angular/issues/4903

import { DOCUMENT } from '@angular/common'; 
... 

constructor(private @Inject(DOCUMENT) document, 
      private elementRef:ElementRef) {}; 

ngAfterViewInit() { 
    var s = this.document.createElement("script"); 
    s.type = "text/javascript"; 
    s.src = "http://somedomain.com/somescript"; 
    this.elementRef.nativeElement.appendChild(s); 
} 

Vedi anche https://stackoverflow.com/a/9413803/217408

+0

questo sembra non funzionare correttamente l'errore di lancio angolare 'this.elementRef.nativeElement.append non è una funzione'? perché ? –

+0

@PardeepJain Suppongo che il nome della funzione corretta sia 'appendChild (s)' in JS/TS. In Dart è 'append (s)' e l'ho mescolato. –

+0

Ho ottenuto un riferimento tramite: document.getElementById. Gli script vengono caricati, ma il codice js che richiede questi script non viene eseguito correttamente al caricamento iniziale (dopo l'aggiornamento funziona). Davvero, non penso che questa sarebbe una soluzione anche se funzionasse. Le mie domande erano di vedere se c'è un "modo angolare" pulito/standard per includere le dipendenze js solo nei componenti che ne hanno bisogno. – dvulanov

Problemi correlati