Czy ktoś może mi powiedzieć, jak korzystać z jQuery z Angular ?
class MyComponent {
constructor() {
// how to query the DOM element from here?
}
}
Wiem, że istnieją obejścia takie jak manipulowanie z góry klasą lub identyfikatorem elementu DOM, ale mam nadzieję na lepszy sposób na zrobienie tego.
Odpowiedzi:
Korzystanie z jQuery z Angular2 jest dziecinnie proste w porównaniu do ng1. Jeśli używasz TypeScript, możesz najpierw odwołać się do definicji maszynopisu jQuery.
TypescriptDefinitions nie są wymagane, ponieważ można po prostu użyć
any
jako typu dla$
lubjQuery
W swoim komponencie kątowym powinieneś odwoływać się do elementu DOM z szablonu, używając
@ViewChild()
Po zainicjowaniu widoku możesz użyćnativeElement
właściwości tego obiektu i przejść do jQuery.Deklaracja
$
(lubjQuery
) jako JQueryStatic da ci wpisane odwołanie do jQuery.Ten przykład jest dostępny na plunker: http://plnkr.co/edit/Nq9LnK?p=preview
tslint będzie narzekać, że
chosen
nie jest własnością na $, aby to naprawić, możesz dodać definicję do interfejsu JQuery w niestandardowym pliku * .d.tsźródło
setTimeout
obejście jest wymagane. Próbowałem z kilkoma innymi komponentami jQuery i wydaje się, że wszystkie wymagają tego obejścia dla poprawnej inicjalizacji. Mam nadzieję, że zmieni się to w przyszłym wydaniu ng2Dlaczego wszyscy sprawiają, że jest to rakieta? Dla każdego, kto musi zrobić kilka podstawowych rzeczy na elementach statycznych, na przykład
body
tag, po prostu wykonaj następujące czynności:script
znacznik ze ścieżką do biblioteki jquery, nie ma znaczenia gdzie (w ten sposób możesz również użyć tagów warunkowych IE, aby załadować niższą wersję jquery dla IE9 i mniejszą).export component
bloku jest funkcja, która wywołuje twój kod:$("body").addClass("done");
Normalnie powoduje to błąd deklaracji, więc zaraz po wszystkich importach do tego pliku .ts, dodajdeclare var $:any;
i gotowe!źródło
declare var $:any;
dla zwycięstwa!To działało dla mnie.
KROK 1 - Najpierw najważniejsze
KROK 2 - IMPORT
#AKTUALIZACJA -
Feb - 2017
Ostatnio piszę kod z
ES6
zamiasttypescript
i jestem w stanieimport
bez* as $
wimport statement
. Tak to wygląda teraz:Powodzenia.
źródło
import * as $ from 'jquery';
w app.module.ts, aby udostępnić go dla całego projektu. I btw: „Dlaczego - zapisz zamiast - zapisz-dev?”import $ from 'jquery';
To najładniejsza instrukcja importu jquery na tej stronie imo. Dokładnie tak, jak chciałbym, żeby to wyglądało.Teraz stało się to bardzo łatwe. Możesz to zrobić, po prostu deklarując zmienną jQuery z dowolnym typem wewnątrz kontrolera Angular2.
Dodaj to tuż po instrukcjach importu i przed dekoratorem komponentów.
Aby uzyskać dostęp do dowolnego elementu o identyfikatorze X lub klasie X, wystarczy zrobić
źródło
Prosty sposób:
1. dołącz skrypt
index.html
2. deklarować
my.component.ts
3. użyj
źródło
Wykonaj te proste kroki. To zadziałało dla mnie. Zacznijmy od nowej aplikacji kątowej 2, aby uniknąć nieporozumień. Używam Angular cli. Więc zainstaluj go, jeśli jeszcze go nie masz. https://cli.angular.io/
Krok 1: Utwórz demo kątową aplikację 2
możesz użyć dowolnej nazwy. Teraz sprawdź, czy działa, uruchamiając poniżej cmd. (Teraz upewnij się, że wskazujesz na „jquery-demo”, jeśli nie używasz polecenia cd)
zobaczysz „aplikacja działa!” w przeglądarce.
Krok 2: Zainstaluj Bower (menedżer pakietów dla Internetu)
Uruchom to polecenie na cli (upewnij się, że wskazujesz na 'jquery-demo', jeśli nie używasz polecenia cd):
Teraz, po udanej instalacji bower, utwórz plik „bower.json” za pomocą poniższego polecenia:
Poprosi o dane wejściowe, po prostu naciśnij klawisz Enter dla wszystkich, jeśli chcesz wartości domyślne, a na końcu wpisz „Tak”, gdy pojawi się pytanie „Wygląda dobrze?”
Teraz możesz zobaczyć nowy plik (bower.json) w folderze „jquery-demo”. Możesz znaleźć więcej informacji na https://bower.io/
Krok 3: Zainstaluj jquery
Uruchom to polecenie
Stworzy nowy folder (bower_components), który będzie zawierał folder instalacyjny jquery. Teraz masz zainstalowaną jquery w folderze „bower_components”.
Krok 4: Dodaj lokalizację jquery w pliku „angular-cli.json”
Otwórz plik „angular-cli.json” (obecny w folderze „jquery-demo”) i dodaj lokalizację jquery w „skryptach”. Będzie to wyglądać tak:
Krok 5: Napisz prosty kod jquery do testowania
Otwórz plik „app.component.html” i dodaj prostą linię kodu. Plik będzie wyglądał następująco:
Teraz otwórz plik „app.component.ts” i dodaj deklarację zmiennej jquery i kod dla znacznika „p”. Należy również użyć haka cyklu życia ngAfterViewInit (). Po wprowadzeniu zmian plik będzie wyglądał następująco:
Teraz uruchom aplikację angular 2 za pomocą polecenia „ng służyć” i przetestuj ją. To powinno działać.
źródło
$("p").click(function(){ $(this).hide(); });
” Najlepszym przykładem kiedy nie używać jQuery w kątowym ?!npm install jquery --save
, a"scripts":["../node_modules/jquery/dist/jquery.js"]
następnieimport $ from 'jquery';
w plikach * .ts. Jaka jest zaleta korzystania z altany?npm install bower
przyniósł:npm WARN deprecated [email protected]:
( stackoverflow.com/a/31219726/3806701 )Możesz zaimplementować hak cyklu życia ngAfterViewInit (), aby dodać niektóre manipulacje DOM
Zachowaj ostrożność podczas korzystania z routera, ponieważ angular2 może przetwarzać widoki .. więc musisz mieć pewność, że manipulacje elementami DOM są wykonywane tylko przy pierwszym wywołaniu afterViewInit .. (Możesz użyć do tego statycznych zmiennych boolowskich)
źródło
Property 'domElement' does not exist on type ElementRef
Robię to w prostszy sposób - najpierw zainstaluj jquery przez npm w konsoli:
npm install jquery -S
a potem w pliku komponentu po prostu piszę:let $ = require('.../jquery.min.js')
i działa! Oto pełny przykład z mojego kodu:W teplate mam na przykład:
EDYTOWAĆ
Alternatywnie zamiast używać:
posługiwać się
i w pliku index.html wpisz:
Spowoduje to zainicjowanie jquery tylko raz globalnie - jest to ważne na przykład w przypadku używania modalnych okien w bootstrapie ...
źródło
console.log({ conatiner : this.container});
napraw toconsole.log({ container: this.container});
krok 1: użyj polecenia: npm install jquery --save
krok 2: możesz po prostu zaimportować kątowy jako:
importuj $ z 'jquery';
to wszystko .
Przykładem może być:
źródło
// instalacja jquery
npm install jquery --save
// instalacja definicji typu dla jquery
typings install dt~jquery --global --save
// dodanie biblioteki jquery do pliku konfiguracyjnego kompilacji, jak określono (w pliku „angular-cli-build.js”)
// uruchom kompilację, aby dodać bibliotekę jquery do kompilacji
ng build
// dodanie konfiguracji ścieżki względnej (w pliku system-config.js)
/** Map relative paths to URLs. */ const map: any = { ....., ......., 'jquery': 'vendor/jquery/dist' };
// zaimportuj bibliotekę jquery do pliku komponentu
poniżej znajduje się fragment kodu mojego przykładowego komponentu
źródło
Jeśli używasz angular-cli, możesz:
Zainstaluj zależność :
npm install jquery --save
npm install @ types / jquery --save-dev
Zaimportuj plik :
Dodaj „../node_modules/jquery/dist/jquery.min.js” do sekcji „skrypt” w pliku .angular-cli.json
Deklaracja jquery :
Dodaj „$” do sekcji „typy” pliku tsconfig.app.json
Możesz znaleźć więcej informacji na temat oficjalnego kątowego dokumentu doc
źródło
Aby użyć Jquery w Angular2 (4)
Postępuj zgodnie z tymi ustawieniami
zainstaluj definicję typu Jquery i Juqry
Do instalacji Jquery
npm install jquery --save
Dla instalacji określania typu Jquery
npm install @types/jquery --save-dev
a następnie po prostu zaimportuj jquery
źródło
Korzystanie z Angular Cli
W angular.json pod tablicą skryptów
Teraz, aby użyć jQuery, wystarczy zaimportować go w następujący sposób do dowolnego komponentu, którego chcesz użyć jQuery.
Na przykład importowanie i używanie jQuery w komponencie głównym
źródło
Ponieważ jestem osłem, pomyślałem, że dobrze byłoby mieć działający kod.
Również wersja Angular-kątomierz w typach Angular2 ma problemy z jQuery
$
, więc najczęściej akceptowana odpowiedź nie daje mi czystej kompilacji.Oto kroki, które muszę wykonać:
index.html
Wewnątrz my.component.ts
źródło
Tylko napisz
po wszystkich sekcjach importowania możesz użyć jQuery i dołączyć bibliotekę jQuery do strony index.html
zadziałało dla mnie
źródło
1) Aby uzyskać dostęp do DOM w komponencie.
Możesz dołączyć jQuery w następujący sposób. 2) Dołącz plik jquery do index.html przed załadowaniem angular2
Możesz użyć Jquery w następujący sposób, tutaj używam selektora dat JQuery Ui.
To praca dla mnie.
źródło
Pomijam instalację jquery, ponieważ wspomniano o tym we wszystkich postach utworzonych przed moim. Więc już zainstalowałeś jquery. Importowanie t do swojego komponentu w ten sposób
będzie działać, ale istnieje inny „kątowy” sposób, aby to zrobić, tworząc usługę.
Krok nr 1: utwórz plik jquery.service.ts .
Krok. Nie. 2: zarejestruj usługę w app.module.ts
Krok nr 3: wstrzyknij usługę do swojego komponentu my-super-duper.component.ts
Będę bardzo wdzięczny za wyjaśnienie zalet i wad obu metod: DI jquery jako usługa vs. import * as $ from 'jquery';
źródło
Najbardziej skutecznym sposobem, jaki znalazłem, jest użycie setTimeout z czasem 0 wewnątrz konstruktora strony / komponentu. To uruchommy jQuery w następnym cyklu wykonania po zakończeniu ładowania Angulara przez wszystkie komponenty potomne. Można użyć kilku innych metod składowych, ale wszystko, co próbowałem, działa najlepiej, gdy uruchamiam się w setTimeout.
źródło
ngOnInit()
zamiast tegosetTimeout
tak naprawdę nie działa właściwie, jeśli masz wiele elementów*ngFor
do wykończenia.Oto, co zadziałało dla mnie - Angular 2 z webpackiem
Próbowałem zadeklarować
$
jako typ,any
ale ilekroć próbowałem użyć dowolnego modułu JQuery, który dostawałem (na przykład)$(..).datepicker()
nie jest funkcjąPonieważ mam plik Jquery zawarty w moim pliku vendor.ts, po prostu zaimportowałem go do mojego komponentu za pomocą
import * as $ from 'jquery';
Jestem teraz w stanie używać wtyczek Jquery (takich jak bootstrap-datetimepicker)
źródło
Możesz także spróbować zaimportować go za pomocą „InjectionToken”. Jak opisano tutaj: Użyj jQuery w Angular / Typescript bez definicji typu
Możesz po prostu wstrzyknąć globalną instancję jQuery i użyć jej. W tym celu nie będziesz potrzebować żadnych definicji typów ani typów.
Po prawidłowym ustawieniu w pliku app.module.ts:
Możesz zacząć używać go w swoich komponentach:
źródło
Instalacja globalnej biblioteki jako oficjalna dokumentacja tutaj
Zainstaluj z npm:
npm install jquery --save
Dodaj potrzebne pliki skryptów do skryptów:
"scripts": [ "node_modules/jquery/dist/jquery.slim.js" ],
Zrestartuj serwer, jeśli go uruchomisz i powinien on działać w Twojej aplikacji.
Jeśli chcesz korzystać z jednego komponentu, użyj go
import $ from 'jquery';
w swoim komponencieźródło
Inni już opublikowali. ale podam tutaj prosty przykład, który może pomóc niektórym nowym użytkownikom.
Krok 1: W twoim pliku index.html jquery cdn odwołanie do pliku
Krok 2: Załóżmy, że chcemy pokazać div lub ukryć div po kliknięciu przycisku:
Krok 3: W pliku komponentu poniżej import deklaruje $ jako poniżej:
niż utworzyć funkcję jak poniżej:
Będzie działał z najnowszymi wersjami Angular i JQuery
źródło
Najpierw zainstaluj jQuery przy użyciu npm w następujący sposób:
Po drugie, przejdź do pliku ./angular-cli.json w katalogu głównym folderu projektu Angular CLI i znajdź właściwość scripts: [] i dołącz ścieżkę do jQuery w następujący sposób:
Teraz, aby użyć jQuery, wystarczy zaimportować go do dowolnego komponentu, którego chcesz użyć jQuery.
Spójrz na poniższy kod, który używa jQuery do animowania div po kliknięciu, szczególnie w drugim wierszu. Importujemy wszystko jako $ z jQuery.
źródło
Zainstaluj jquery
Terminal $
npm install jquery
(Dla bootstrap 4 ...)
Terminal $
npm install popper.js
Terminal $
npm install bootstrap
Następnie dodaj
import
instrukcję doapp.module.ts
.(Dla bootstrap 4 ...)
Teraz nie będziesz już potrzebować
<SCRIPT>
tagów do odwoływania się do JavaScript.(Do każdego CSS, którego chcesz użyć, nadal trzeba się odwoływać
styles.css
)źródło
Kiedy używasz Angulara, staraj się nie używać biblioteki jquery. Spróbuj użyć funkcji i bibliotek utworzonych dla frameworka kątowego. Jeśli chcesz użyć funkcji jquery, takich jak find () , html () , closest () itp., Sugeruję użycie czystego js. przykład: querySelector () , innerHTML , parentElement i etc ...
źródło