Mam nadzieję, że proste pytanie.
Chcę uruchomić skrypt, gdy zostanie uruchomiony odpowiednik $ document.ready () w Angular2. Jaki jest najlepszy sposób, aby to osiągnąć?
Próbowałem umieścić skrypt na końcu index.html
, ale jak się dowiedziałem, to nie działa! Rozumiem, że musi iść w jakiejś deklaracji komponentu?
Czy można uruchomić ładowanie skryptu z .js
pliku?
EDYCJA - Kod:
Mam następujące wtyczki js i css wstrzyknięte do mojej aplikacji (z motywu html Foundry ).
<link href="css/themify-icons.css" rel="stylesheet" type="text/css" media="all" />
<link href="css/bootstrap.css" rel="stylesheet" type="text/css" media="all" />
...
<script src="js/jquery.min.js"></script>
<script src="js/bootstrap.min.js"></script>
<script src="js/flexslider.min.js"></script>
...
<script src="js/scripts.js"></script> //This initiates all the plugins
Jak już wspomniano, skrypt scripts.js `` tworzy instancję '' całej rzeczy i dlatego należy go uruchomić, gdy Angular będzie gotowy. script.js
Działa:
import {Component, AfterViewInit} from 'angular2/core';
@Component({
selector: 'home',
templateUrl: './components/home/home.html'
})
export class HomeCmp implements AfterViewInit {
ngAfterViewInit() {
//Copy in all the js code from the script.js. Typescript will complain but it works just fine
}
Odpowiedzi:
Możesz samodzielnie uruchomić zdarzenie w
ngOnInit()
komponencie głównym Angular, a następnie nasłuchiwać tego zdarzenia poza Angular.To jest kod Darta (nie znam TypeScript), ale nie powinien być trudny do przetłumaczenia
źródło
ngAfterViewInit() { ... }
. Nie ma potrzeby odpalania wydarzenia.Kopiowanie odpowiedzi od Chrisa:
Działa:
źródło
AfterViewChecked
na tym, że użyłem, ale mimo wszystko oto upvote za skierowanie mnie we właściwym kierunku.ngAfterViewInit()
. Npwindow.MY_APP = {}; MY_APP.init = function () {/*copy all that script.js here*/ }
. Następnie w komponencie,import ...; declare var MY_APP: any; class HomeComponent() { ngAfterViewInit() { MY_APP.init(); } }
ale najważniejsze jest to, że nie masz aplikacji angular2 - twój script.js jest w zasadzie starą stroną jquery. Większość z nich można by zamienić na komponenty NG2.$document.ready()
.Wybrałem to rozwiązanie, więc nie musiałem włączać mojego niestandardowego kodu js do komponentu innego niż funkcja jQuery $ .getScript .
Zauważyłem, że jest to dobry sposób na obejście niestandardowych lub dostawców plików js, które nie mają dostępnych typów, dzięki czemu TypeScript nie krzyczy na ciebie, gdy idziesz, aby uruchomić aplikację.
Aktualizacja Właściwie w moim scenariuszu zdarzenie cyklu życia OnInit działało lepiej, ponieważ uniemożliwiło załadowanie skryptu po załadowaniu widoków, co miało miejsce w przypadku ngAfterViewInit, i spowodowało, że widok pokazywał nieprawidłowe pozycje elementu przed załadowaniem skryptu.
źródło
Cannot find name '$'.
gdy próbuję naśladować ten przykład?npm install @types/jquery -D
? : DAby użyć jQuery wewnątrz Angulara, zadeklaruj tylko $ w następujący sposób: deklaruj var $: any;
źródło
przyjęta odpowiedź nie jest poprawna i biorąc pod uwagę pytanie, nie ma sensu jej akceptować
ngAfterViewInit uruchomi się, gdy DOM będzie gotowy
whine ngOnInit uruchomi się, gdy komponent strony dopiero zaczyna być tworzony
źródło
W pliku main.ts bootstrap po DOMContentLoaded, więc angular zostanie załadowany, gdy DOM jest w pełni załadowany.
źródło