Kann mir jemand sagen, wie man jQuery mit Angular benutzt ?
class MyComponent {
constructor() {
// how to query the DOM element from here?
}
}
Ich bin mir bewusst, dass es Problemumgehungen wie das Manipulieren der Klasse oder ID des DOM-Elements im Voraus gibt, aber ich hoffe auf eine sauberere Vorgehensweise.
Antworten:
Die Verwendung von jQuery aus Angular2 ist im Vergleich zu ng1 ein Kinderspiel. Wenn Sie TypeScript verwenden, können Sie zuerst auf die jQuery-Typoskriptdefinition verweisen.
TypescriptDefinitions sind nicht erforderlich, da Sie sie nur
any
als Typ für$
oder verwenden könnenjQuery
In Ihrer Winkelkomponente sollten Sie mit auf ein DOM-Element aus der Vorlage verweisen
@ViewChild()
Nachdem die Ansicht initialisiert wurde, können Sie dienativeElement
Eigenschaft dieses Objekts verwenden und an jQuery übergeben.Wenn Sie
$
(oderjQuery
) als JQueryStatic deklarieren, erhalten Sie einen typisierten Verweis auf jQuery.Dieses Beispiel ist auf plunker verfügbar: http://plnkr.co/edit/Nq9LnK?p=preview
tslint wird sich darüber beschweren,
chosen
dass es keine Eigenschaft für $ ist. Um dies zu beheben, können Sie der JQuery-Oberfläche in Ihrer benutzerdefinierten * .d.ts-Datei eine Definition hinzufügenquelle
setTimeout
Problemumgehung erforderlich ist. Ich habe es mit mehreren anderen jQuery-Komponenten versucht, und anscheinend benötigen alle diese Problemumgehung für die korrekte Initialisierung. Ich hoffe, dass sich dies in der zukünftigen Version von ng2 ändern wirdWarum machen es alle zu einer Raketenwissenschaft? Für alle anderen, die einige grundlegende Dinge an statischen Elementen erledigen müssen, z. B.
body
Tag, tun Sie einfach Folgendes:script
Fügen Sie in index.html ein Tag mit dem Pfad zu Ihrer jquery lib hinzu, egal wo (auf diese Weise können Sie auch IE-bedingte Tags verwenden, um eine niedrigere Version von jquery für IE9 und weniger zu laden).export component
Block haben Sie eine Funktion, die Ihren Code$("body").addClass("done");
aufruft : Normalerweise verursacht dies einen Deklarationsfehler. Fügen Sie also gleich nach allen Importen in diese .ts-Datei hinzudeclare var $:any;
und los geht's!quelle
declare var $:any;
für den Sieg!Das hat bei mir funktioniert.
SCHRITT 1 - Das Wichtigste zuerst
SCHRITT 2 - IMPORT
#UPDATE -
Feb - 2017
In letzter Zeit schreibe ich Code mit
ES6
statttypescript
und kannimport
ohne* as $
in derimport statement
. So sieht es jetzt aus:Viel Glück.
quelle
import * as $ from 'jquery';
in app.module.ts , um es dem gesamten Projekt zur Verfügung zu stellen. Und übrigens: "Warum - speichern statt - speichern-dev?"import $ from 'jquery';
Das ist die schönste jquery import Anweisung auf dieser Seite imo. Genau so, wie ich es gerne hätte.Jetzt ist es sehr einfach geworden. Sie können dies tun, indem Sie einfach die jQuery-Variable mit einem beliebigen Typ innerhalb des Angular2-Controllers deklarieren.
Fügen Sie dies direkt nach den Importanweisungen und vor dem Komponentendekorator hinzu.
Um auf ein Element mit ID X oder Klasse X zuzugreifen, müssen Sie nur noch etwas tun
quelle
Ein einfacher Weg:
1. Skript einschließen
index.html
2. erklären
my.component.ts
3. verwenden
quelle
Bitte folgen Sie diesen einfachen Schritten. Es hat bei mir funktioniert. Beginnen wir mit einer neuen Angular 2-App, um Verwirrung zu vermeiden. Ich benutze Angular Cli. Installieren Sie es also, wenn Sie es noch nicht haben. https://cli.angular.io/
Schritt 1: Erstellen Sie eine Demo Angular 2 App
Sie können einen beliebigen Namen verwenden. Überprüfen Sie nun, ob es funktioniert, indem Sie unter cmd ausführen. (Stellen Sie nun sicher, dass Sie auf 'jquery-demo' zeigen, wenn Sie den Befehl cd nicht verwenden.)
Sie werden sehen, "App funktioniert!" im Browser.
Schritt 2: Installieren Sie Bower (einen Paketmanager für das Web)
Führen Sie diesen Befehl auf cli aus (stellen Sie sicher, dass Sie auf 'jquery-demo' zeigen, wenn Sie den Befehl cd nicht verwenden):
Erstellen Sie nun nach erfolgreicher Installation von bower eine 'bower.json'-Datei mit dem folgenden Befehl:
Es werden Sie nach Eingaben gefragt. Drücken Sie einfach die Eingabetaste für alle, wenn Sie Standardwerte möchten, und geben Sie am Ende "Ja" ein, wenn Sie nach "Sieht gut aus?"
Jetzt können Sie eine neue Datei (bower.json) im Ordner "jquery-demo" sehen. Weitere Informationen finden Sie unter https://bower.io/
Schritt 3: Installieren Sie jquery
Führen Sie diesen Befehl aus
Es wird ein neuer Ordner (bower_components) erstellt, der den Installationsordner von jquery enthält. Jetzt haben Sie jquery im Ordner 'bower_components' installiert.
Schritt 4: Fügen Sie den Speicherort jquery in die Datei 'angle-cli.json' ein
Öffnen Sie die Datei 'angle-cli.json' (im Ordner 'jquery-demo' vorhanden) und fügen Sie den Speicherort jquery in "scripts" hinzu. Es wird so aussehen:
Schritt 5: Schreiben Sie einen einfachen JQuery-Code zum Testen
Öffnen Sie die Datei 'app.component.html' und fügen Sie eine einfache Codezeile hinzu. Die Datei sieht folgendermaßen aus:
Öffnen Sie nun die Datei 'app.component.ts' und fügen Sie die Deklaration der jquery-Variablen und den Code für das Tag 'p' hinzu. Sie sollten auch den Lifecycle-Hook ngAfterViewInit () verwenden. Nach dem Ändern sieht die Datei folgendermaßen aus:
Führen Sie nun Ihre Angular 2-App mit dem Befehl 'ng serve' aus und testen Sie sie. Es sollte funktionieren.
quelle
$("p").click(function(){ $(this).hide(); });
" Bestes Beispiel dafür, wann jQuery in Angular nicht verwendet wird?!npm install jquery --save
, dann"scripts":["../node_modules/jquery/dist/jquery.js"]
, dannimport $ from 'jquery';
in * .ts-Dateien. Was ist der Vorteil mit Laube?npm install bower
ergab:npm WARN deprecated [email protected]:
( stackoverflow.com/a/31219726/3806701 )Sie können den Lifecycle-Hook ngAfterViewInit () implementieren , um einige DOM-Manipulationen hinzuzufügen
Seien Sie vorsichtig, wenn Sie den Router verwenden, da angle2 möglicherweise Ansichten wiederverwendet. Sie müssen also sicherstellen, dass die Manipulationen der DOM-Elemente nur beim ersten Aufruf von afterViewInit durchgeführt werden. (Sie können dazu statische boolesche Variablen verwenden.)
quelle
Property 'domElement' does not exist on type ElementRef
Ich mache es auf einfachere Weise - erst jquery von npm in der Konsole installieren:
npm install jquery -S
und dann in der Komponentendatei schreibe ich einfach:let $ = require('.../jquery.min.js')
und es funktioniert! Hier ein vollständiges Beispiel aus meinem Code:In teplate habe ich zum Beispiel:
BEARBEITEN
Alternativ anstelle von:
verwenden
und in Ihre index.html setzen:
Dadurch wird jquery nur einmal global initialisiert - dies ist beispielsweise für die Verwendung von modalen Fenstern in Bootstrap wichtig ...
quelle
console.log({ conatiner : this.container});
beheben Sie es aufconsole.log({ container: this.container});
Schritt 1: Verwenden Sie den Befehl: npm install jquery --save
Schritt 2: Sie können eckig einfach importieren als:
importiere $ aus 'jquery';
das ist alles .
Ein Beispiel wäre:
quelle
// JQuery installieren
npm install jquery --save
// Typdefinition für die Abfrage installieren
typings install dt~jquery --global --save
// Hinzufügen der JQuery-Bibliothek zur Build-Konfigurationsdatei wie angegeben (in der Datei "angle-cli-build.js")
// Den Build ausführen, um die JQuery-Bibliothek zum Build hinzuzufügen
ng build
// Hinzufügen der relativen Pfadkonfiguration (in system-config.js)
/** Map relative paths to URLs. */ const map: any = { ....., ......., 'jquery': 'vendor/jquery/dist' };
// importiere die jquery Bibliothek in deine Komponentendatei
Unten ist der Code-Snipppet meiner Beispielkomponente
quelle
Wenn Sie Angular-Cli verwenden, können Sie Folgendes tun:
Installieren Sie die Abhängigkeit :
npm install jquery --save
npm install @ types / jquery --save-dev
Importieren Sie die Datei :
Fügen Sie "../node_modules/jquery/dist/jquery.min.js" zum Abschnitt "script" in der Datei .angular-cli.json hinzu
Deklarieren Sie jquery :
Fügen Sie "$" zum Abschnitt "types" von tsconfig.app.json hinzu
Weitere Details finden Sie im offiziellen eckigen CLI-Dokument
quelle
So verwenden Sie Jquery in Angular2 (4)
Befolgen Sie diese Einstellungen
Installieren Sie die Definition des Typs Jquery und Juqry
Für die Jquery-Installation
npm install jquery --save
Für die Installation von Jquery Type Defination Installation
npm install @types/jquery --save-dev
und importieren Sie dann einfach die Abfrage
quelle
Verwenden von Angular Cli
In angular.json unter scripts array
Um jQuery zu verwenden, müssen Sie es lediglich wie folgt in die Komponente importieren, die Sie für jQuery verwenden möchten.
Zum Beispiel das Importieren und Verwenden von jQuery in der Stammkomponente
quelle
Da ich ein Trottel bin, dachte ich, es wäre gut, einen funktionierenden Code zu haben.
Außerdem hat die Angular2-Typisierungsversion von Angular -Protractor Probleme mit der jQuery
$
, sodass die am häufigsten akzeptierte Antwort keine saubere Kompilierung ermöglicht.Hier sind die Schritte, an denen ich arbeiten muss:
index.html
In my.component.ts
quelle
Einfach schreiben
Nach allen Importabschnitten können Sie jQuery verwenden und die jQuery-Bibliothek in Ihre index.html-Seite aufnehmen
es hat bei mir funktioniert
quelle
1) Zugriff auf DOM in der Komponente.
Sie können jQuery folgendermaßen einschließen. 2) Fügen Sie Ihre jquery-Datei in index.html ein, bevor angle2 geladen wird
Sie können Jquery folgendermaßen verwenden: Hier verwende ich die JQuery Ui-Datumsauswahl.
Diese Arbeit für mich.
quelle
Ich überspringe die Installation von jquery, da dieser Punkt in allen vor mir erstellten Posts erwähnt wurde. Sie haben also jquery bereits installiert. So importieren Sie t in Ihre Komponente
wird funktionieren, aber es gibt eine andere "eckige" Möglichkeit, dies durch Erstellen eines Dienstes zu tun.
Schritt Nr. 1: Erstellen Sie die Datei jquery.service.ts .
Schritt. Nein. 2: Registrieren Sie den Dienst in app.module.ts
Schritt Nr. 3: Fügen Sie den Dienst in Ihre Komponente my-super-duper.component.ts ein
Ich wäre sehr dankbar, wenn jemand die Vor- und Nachteile beider Methoden erklären könnte: DI jquery as a service vs. import * as $ from 'jquery';
quelle
Der effektivste Weg, den ich gefunden habe, ist die Verwendung von setTimeout mit der Zeit 0 innerhalb des Seiten- / Komponentenkonstruktors. Dadurch wird die jQuery im nächsten Ausführungszyklus ausgeführt, nachdem Angular alle untergeordneten Komponenten geladen hat. Einige andere Komponentenmethoden könnten verwendet werden, aber alles, was ich versucht habe, funktioniert am besten, wenn es in einem setTimeout ausgeführt wird.
quelle
ngOnInit()
eher als diese verwendensetTimeout
funktioniert eigentlich nicht wirklich, wenn Sie viele Elemente*ngFor
zum Rendern haben.Folgendes hat bei mir funktioniert - Angular 2 mit Webpack
Ich habe versucht,
$
als Typ zu deklarieren,any
aber wenn ich versucht habe, ein JQuery-Modul zu verwenden, das ich (zum Beispiel) erhalten habe,$(..).datepicker()
ist dies keine FunktionDa Jquery in meiner Datei vendor.ts enthalten ist, habe ich es einfach mit in meine Komponente importiert
import * as $ from 'jquery';
Ich kann jetzt Jquery-Plugins (wie Bootstrap-DatetimePicker) verwenden
quelle
Sie können auch versuchen, es mit dem "InjectionToken" zu importieren. Wie hier beschrieben: Verwenden Sie jQuery in Angular / Typescript ohne Typdefinition
Sie können die globale jQuery-Instanz einfach einfügen und verwenden. Dafür benötigen Sie keine Typdefinitionen oder Typisierungen.
Bei korrekter Einstellung in Ihrer app.module.ts:
Sie können es in Ihren Komponenten verwenden:
quelle
Installation der globalen Bibliothek als offizielle Dokumentation hier
Von npm installieren:
npm install jquery --save
Fügen Sie den Skripten die erforderlichen Skriptdateien hinzu:
"scripts": [ "node_modules/jquery/dist/jquery.slim.js" ],
Starten Sie den Server neu, wenn Sie ihn ausführen, und er sollte auf Ihrer App funktionieren.
Wenn Sie innerhalb einer einzelnen Komponente verwenden möchten, verwenden Sie diese
import $ from 'jquery';
innerhalb Ihrer Komponentequelle
Andere haben bereits gepostet. Aber ich gebe hier ein einfaches Beispiel, damit einige Neuankömmlinge helfen können.
Schritt 1: In Ihrer index.html-Datei verweisen Sie auf jquery cdn
Schritt 2: Nehmen wir an, wir möchten div auf Knopfdruck ein- oder ausblenden:
Schritt 3: In der Komponentendatei unten deklariert der Import $ als unten:
als Funktion wie unten erstellen:
Es funktioniert mit den neuesten Versionen von Angular und JQuery
quelle
Installieren Sie zunächst jQuery mit npm wie folgt:
Wechseln Sie anschließend zur Datei ./angular-cli.json im Stammverzeichnis Ihres Angular CLI-Projektordners, suchen Sie die Eigenschaft scripts: [] und geben Sie den Pfad zu jQuery wie folgt ein:
Um jQuery zu verwenden, müssen Sie es nur noch in die Komponente importieren, die Sie für jQuery verwenden möchten.
Schauen Sie sich den folgenden Code an, der jQuery verwendet, um div beim Klicken zu animieren, insbesondere in der zweiten Zeile. Wir importieren alles als $ aus jQuery.
quelle
Installieren Sie jquery
Terminal $
npm install jquery
(Für Bootstrap 4 ...)
Terminal $
npm install popper.js
Terminal $
npm install bootstrap
Fügen Sie dann die
import
Anweisung zu hinzuapp.module.ts
.(Für Bootstrap 4 ...)
Jetzt brauchen Sie nicht mehr
<SCRIPT>
Tags um auf das JavaScript zu verweisen.(Auf jedes CSS, das Sie verwenden möchten, muss noch verwiesen werden.
styles.css
)quelle
Wenn Sie Angular verwenden, versuchen Sie, die jquery-Bibliothek nicht zu verwenden. Versuchen Sie, die Funktionen und Bibliotheken zu verwenden, die für das Winkelgerüst erstellt wurden. Wenn Sie die jquery-Funktionen wie find () , html () , next () usw. verwenden möchten, empfehle ich die Verwendung des reinen js. Beispiel: querySelector () , innerHTML , parentElement und etc ...
quelle