Pertanyaan sederhana, saya harap.
Saya ingin menjalankan skrip ketika Angular2 yang setara dengan $ document.ready () dipecat. Apa cara terbaik untuk mencapai ini?
Saya sudah mencoba meletakkan skrip di akhir index.html
, tetapi setelah saya tahu, ini tidak berhasil! Saya menganggap itu harus masuk dalam semacam deklarasi komponen?
Apakah mungkin untuk menjalankan memuat skrip dari .js
file?
EDIT - Kode:
Saya memiliki plugin js dan css berikut yang dimasukkan ke dalam aplikasi saya (dari tema 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
Seperti dicatat, scripts.js 'instantiates' semuanya, dan dengan demikian perlu dijalankan setelah Angular siap. script.js
Berhasil:
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
}
Jawaban:
Anda dapat mengaktifkan acara sendiri di
ngOnInit()
komponen root Angular Anda dan kemudian mendengarkan acara ini di luar Angular.Ini adalah kode Dart (saya tidak tahu TypeScript) tetapi seharusnya tidak sulit untuk diterjemahkan
sumber
ngAfterViewInit() { ... }
. Tidak perlu menyalakan acara.Menyalin jawaban dari Chris:
Berhasil:
sumber
AfterViewChecked
, tetapi tetap saja, inilah suara positif untuk mengarahkan saya ke arah yang benar.ngAfterViewInit()
. Miswindow.MY_APP = {}; MY_APP.init = function () {/*copy all that script.js here*/ }
. Kemudian di komponen Anda,import ...; declare var MY_APP: any; class HomeComponent() { ngAfterViewInit() { MY_APP.init(); } }
Tapi intinya adalah Anda tidak memiliki aplikasi angular2 - script.js Anda pada dasarnya adalah halaman jquery jadul. Anda dapat mengubah sebagian besar menjadi komponen NG2.$document.ready()
.Saya menggunakan solusi ini jadi saya tidak perlu menyertakan kode js kustom saya di dalam komponen selain fungsi jQuery $ .getScript .
Saya telah menemukan ini adalah cara yang baik untuk menyiasati file js kustom atau vendor yang tidak memiliki pengetikan yang tersedia dengan cara itu TypeScript tidak berteriak pada Anda ketika Anda pergi untuk memulai aplikasi Anda.
Perbarui Sebenarnya dalam skenario saya, peristiwa siklus hidup OnInit bekerja lebih baik karena mencegah skrip dimuat setelah tampilan dimuat, yang merupakan kasus ngAfterViewInit, dan yang menyebabkan tampilan menampilkan posisi elemen yang salah sebelum pemuatan skrip.
sumber
Cannot find name '$'.
ketika saya mencoba mengikuti contoh ini?npm install @types/jquery -D
mencoba? : DUntuk menggunakan jQuery di dalam Angular hanya mendeklarasikan $ sebagai berikut: mendeklarasikan var $: any;
sumber
jawaban yang diterima tidak benar, dan tidak masuk akal untuk menerimanya mengingat pertanyaan itu
ngAfterViewInit akan terpicu saat DOM sudah siap
whine ngOnInit akan terpicu saat komponen halaman baru mulai dibuat
sumber
Di file main.ts Anda, bootstrap setelah DOMContentLoaded, jadi angular akan dimuat saat DOM dimuat penuh.
sumber