AngularJS vs. jQuery
AngularJS und jQuery verwenden sehr unterschiedliche Ideologien. Wenn Sie von jQuery kommen, werden Sie möglicherweise einige der Unterschiede überraschend finden. Angular kann dich wütend machen.
Das ist normal, du solltest dich durchsetzen. Angular ist es wert.
Der große Unterschied (TLDR)
jQuery bietet Ihnen ein Toolkit zum Auswählen beliebiger Bits des DOM und zum Vornehmen von Ad-hoc-Änderungen. Sie können so ziemlich alles tun, was Sie Stück für Stück mögen.
AngularJS bietet Ihnen stattdessen einen Compiler .
Dies bedeutet, dass AngularJS Ihr gesamtes DOM von oben nach unten liest und es als Code behandelt, wörtlich als Anweisungen an den Compiler. Beim Durchlaufen des DOM wird nach bestimmten Anweisungen (Compiler-Anweisungen) gesucht, die dem AngularJS-Compiler mitteilen, wie er sich verhält und was zu tun ist. Direktiven sind kleine Objekte voller JavaScript, die mit Attributen, Tags, Klassen oder sogar Kommentaren übereinstimmen können.
Wenn der Angular-Compiler feststellt, dass ein Teil des DOM mit einer bestimmten Direktive übereinstimmt, ruft er die Direktivenfunktion auf und übergibt ihr das DOM-Element, alle Attribute, den aktuellen $ scope (einen lokalen Variablenspeicher) und einige andere nützliche Bits. Diese Attribute können Ausdrücke enthalten, die von der Richtlinie interpretiert werden können und die angeben, wie und wann sie sich selbst neu zeichnen sollen.
Direktiven können dann wiederum zusätzliche Angular-Komponenten wie Controller, Dienste usw. einbinden. Das Ergebnis des Compilers ist eine vollständig geformte Webanwendung, die verkabelt und einsatzbereit ist.
Dies bedeutet, dass Angular vorlagengesteuert ist . Ihre Vorlage steuert das JavaScript, nicht umgekehrt. Dies ist ein radikaler Rollentausch und das genaue Gegenteil des unauffälligen JavaScript, das wir in den letzten 10 Jahren oder so geschrieben haben. Dies kann gewöhnungsbedürftig sein.
Wenn dies so klingt, als wäre es zu streng und einschränkend, könnte nichts weiter von der Wahrheit entfernt sein. Da AngularJS Ihren HTML-Code als Code behandelt, erhalten Sie in Ihrer Webanwendung eine Granularität auf HTML-Ebene . Alles ist möglich und die meisten Dinge sind überraschend einfach, wenn Sie ein paar konzeptionelle Sprünge machen.
Kommen wir zum Kern.
Erstens ersetzt Angular jQuery nicht
Angular und jQuery machen verschiedene Dinge. AngularJS bietet Ihnen eine Reihe von Tools zum Erstellen von Webanwendungen. jQuery bietet Ihnen hauptsächlich Tools zum Ändern des DOM. Wenn jQuery auf Ihrer Seite vorhanden ist, wird es von AngularJS automatisch verwendet. Wenn dies nicht der Fall ist, wird AngularJS mit jQuery Lite ausgeliefert, einer reduzierten, aber immer noch perfekt verwendbaren Version von jQuery.
Misko mag jQuery und hat keine Einwände dagegen, dass Sie es verwenden. Im Laufe der Zeit werden Sie jedoch feststellen, dass Sie so gut wie alle Ihre Arbeiten mit einer Kombination aus Gültigkeitsbereich, Vorlagen und Anweisungen erledigen können. Sie sollten diesen Workflow nach Möglichkeit bevorzugen, da Ihr Code diskreter, konfigurierbarer und mehr ist Winkelig.
Wenn Sie jQuery verwenden, sollten Sie es nicht überall verteilen. Der richtige Ort für die DOM-Manipulation in AngularJS befindet sich in einer Direktive. Dazu später mehr.
Unauffälliges JavaScript mit Selektoren vs. deklarativen Vorlagen
jQuery wird normalerweise unauffällig angewendet. Ihr JavaScript-Code ist in der Kopf- (oder Fußzeile) verlinkt, und dies ist der einzige Ort, an dem er erwähnt wird. Wir verwenden Selektoren, um Teile der Seite auszuwählen und Plugins zu schreiben, um diese Teile zu modifizieren.
Das JavaScript hat die Kontrolle. Der HTML-Code existiert völlig unabhängig. Ihr HTML bleibt auch ohne JavaScript semantisch. Onclick-Attribute sind eine sehr schlechte Praxis.
Eines der ersten Dinge, die Sie an AngularJS bemerken werden, ist, dass benutzerdefinierte Attribute überall sind . Ihr HTML-Code wird mit ng-Attributen übersät sein, die im Wesentlichen onClick-Attribute für Steroide sind. Dies sind Direktiven (Compiler-Direktiven) und eine der Hauptmethoden, mit denen die Vorlage mit dem Modell verknüpft wird.
Wenn Sie dies zum ersten Mal sehen, könnten Sie versucht sein, AngularJS als aufdringliches JavaScript der alten Schule abzuschreiben (wie ich es zuerst getan habe). Tatsächlich hält sich AngularJS nicht an diese Regeln. In AngularJS ist Ihr HTML5 eine Vorlage. Es wird von AngularJS zusammengestellt, um Ihre Webseite zu erstellen.
Dies ist der erste große Unterschied. Für jQuery ist Ihre Webseite ein zu manipulierendes DOM. Für AngularJS ist Ihr HTML-Code der zu kompilierende Code. AngularJS liest Ihre gesamte Webseite ein und kompiliert sie mithilfe des integrierten Compilers buchstäblich zu einer neuen Webseite.
Ihre Vorlage sollte deklarativ sein. seine Bedeutung sollte einfach durch Lesen klar sein. Wir verwenden benutzerdefinierte Attribute mit aussagekräftigen Namen. Wir stellen neue HTML-Elemente zusammen, wieder mit aussagekräftigen Namen. Ein Designer mit minimalen HTML-Kenntnissen und ohne Programmierkenntnisse kann Ihre AngularJS-Vorlage lesen und verstehen, was sie tut. Er oder sie kann Änderungen vornehmen. Dies ist der Winkelweg.
Die Vorlage befindet sich auf dem Fahrersitz.
Eine der ersten Fragen, die ich mir beim Starten von AngularJS und beim Durchlaufen der Tutorials gestellt habe, lautet: "Wo ist mein Code?" . Ich habe kein JavaScript geschrieben und trotzdem habe ich all dieses Verhalten. Die Antwort liegt auf der Hand. Da AngularJS das DOM kompiliert, behandelt AngularJS Ihren HTML-Code als Code. In vielen einfachen Fällen reicht es oft aus, nur eine Vorlage zu schreiben und AngularJS sie in eine Anwendung für Sie kompilieren zu lassen.
Ihre Vorlage steuert Ihre Anwendung. Es wird als DSL behandelt . Sie schreiben AngularJS-Komponenten, und AngularJS sorgt dafür, dass sie eingezogen und basierend auf der Struktur Ihrer Vorlage zum richtigen Zeitpunkt verfügbar gemacht werden. Dies unterscheidet sich stark von einem Standard- MVC- Muster, bei dem die Vorlage nur zur Ausgabe dient.
Es ist XSLT ähnlicher als beispielsweise Ruby on Rails .
Dies ist eine radikale Umkehrung der Kontrolle, an die man sich erst gewöhnen muss.
Versuchen Sie nicht mehr, Ihre Anwendung über JavaScript zu steuern. Lassen Sie die Vorlage die Anwendung steuern, und lassen Sie AngularJS die Verkabelung der Komponenten übernehmen. Dies ist auch der Winkelweg.
Semantisches HTML vs. semantische Modelle
Mit jQuery sollte Ihre HTML-Seite semantisch aussagekräftigen Inhalt enthalten. Wenn das JavaScript deaktiviert ist (von einem Benutzer oder einer Suchmaschine), bleibt Ihr Inhalt zugänglich.
Weil AngularJS Ihre HTML-Seite als Vorlage behandelt. Die Vorlage sollte nicht semantisch sein, da Ihr Inhalt normalerweise in Ihrem Modell gespeichert wird, das letztendlich von Ihrer API stammt. AngularJS kompiliert Ihr DOM mit dem Modell, um eine semantische Webseite zu erstellen.
Ihre HTML-Quelle ist nicht mehr semantisch, sondern Ihre API und Ihr kompiliertes DOM sind semantisch.
In AngularJS, dh im Modell, lebt der HTML-Code nur als Vorlage und nur zur Anzeige.
An diesem Punkt haben Sie wahrscheinlich alle möglichen Fragen zu SEO und Barrierefreiheit, und das zu Recht. Hier gibt es offene Fragen. Die meisten Screenreader analysieren jetzt JavaScript. Suchmaschinen können auch AJAXed- Inhalte indizieren . Trotzdem sollten Sie sicherstellen, dass Sie Pushstate-URLs verwenden und eine anständige Sitemap haben. Eine Diskussion des Problems finden Sie hier: https://stackoverflow.com/a/23245379/687677
Trennung von Bedenken (SOC) gegen MVC
Separation of Concerns (SOC) ist ein Muster, das über viele Jahre der Webentwicklung aus einer Vielzahl von Gründen entstanden ist, darunter SEO, Barrierefreiheit und Browser-Inkompatibilität. Es sieht aus wie das:
- HTML - Semantische Bedeutung. Der HTML-Code sollte eigenständig sein.
- CSS - Styling, ohne CSS ist die Seite noch lesbar.
- JavaScript - Verhalten, ohne das Skript bleibt der Inhalt.
Auch hier spielt AngularJS nicht nach ihren Regeln. Mit einem Schlag beseitigt AngularJS ein Jahrzehnt empfangener Weisheit und implementiert stattdessen ein MVC-Muster, in dem die Vorlage nicht mehr semantisch ist, nicht einmal ein bisschen.
Es sieht aus wie das:
- Modell - Ihre Modelle enthalten Ihre semantischen Daten. Modelle sind normalerweise JSON- Objekte. Modelle existieren als Attribute eines Objekts namens $ scope. Sie können auch praktische Dienstprogrammfunktionen in $ scope speichern, auf die Ihre Vorlagen dann zugreifen können.
- Ansicht - Ihre Ansichten sind in HTML geschrieben. Die Ansicht ist normalerweise nicht semantisch, da Ihre Daten im Modell gespeichert sind.
- Controller - Ihr Controller ist eine JavaScript-Funktion, die die Ansicht mit dem Modell verknüpft. Seine Funktion besteht darin, $ scope zu initialisieren. Abhängig von Ihrer Anwendung müssen Sie möglicherweise einen Controller erstellen oder nicht. Sie können viele Controller auf einer Seite haben.
MVC und SOC befinden sich nicht an entgegengesetzten Enden derselben Skala, sondern auf völlig unterschiedlichen Achsen. SOC macht in einem AngularJS-Kontext keinen Sinn. Du musst es vergessen und weitermachen.
Wenn Sie wie ich die Browserkriege durchlebt haben, finden Sie diese Idee möglicherweise ziemlich anstößig. Überwinde es, es wird sich lohnen, das verspreche ich.
Plugins vs. Direktiven
Plugins erweitern jQuery. AngularJS-Richtlinien erweitern die Funktionen Ihres Browsers.
In jQuery definieren wir Plugins, indem wir dem jQuery.prototype Funktionen hinzufügen. Wir verbinden diese dann mit dem DOM, indem wir Elemente auswählen und das Plugin für das Ergebnis aufrufen. Die Idee ist, die Funktionen von jQuery zu erweitern.
Wenn Sie beispielsweise ein Karussell auf Ihrer Seite haben möchten, können Sie eine ungeordnete Liste von Abbildungen definieren, die möglicherweise in ein Navigationselement eingeschlossen sind. Sie können dann etwas jQuery schreiben, um die Liste auf der Seite auszuwählen und sie als Galerie mit Zeitüberschreitungen für die gleitende Animation neu zu gestalten.
In AngularJS definieren wir Direktiven. Eine Direktive ist eine Funktion, die ein JSON-Objekt zurückgibt. Dieses Objekt teilt AngularJS mit, nach welchen DOM-Elementen gesucht werden soll und welche Änderungen daran vorgenommen werden müssen. Direktiven werden mithilfe von Attributen oder Elementen, die Sie erfinden, in die Vorlage eingebunden. Die Idee ist, die Funktionen von HTML um neue Attribute und Elemente zu erweitern.
Die AngularJS-Methode besteht darin, die Funktionen von nativ aussehendem HTML zu erweitern. Sie sollten HTML schreiben, das wie HTML aussieht und um benutzerdefinierte Attribute und Elemente erweitert ist.
Wenn Sie ein Karussell möchten, verwenden Sie einfach ein <carousel />
Element, definieren Sie dann eine Anweisung, um eine Vorlage abzurufen, und lassen Sie diesen Trottel funktionieren.
Viele kleine Direktiven gegen große Plugins mit Konfigurationsschaltern
Die Tendenz bei jQuery besteht darin, große Plugins wie Lightbox zu schreiben, die wir dann konfigurieren, indem wir zahlreiche Werte und Optionen übergeben.
Dies ist ein Fehler in AngularJS.
Nehmen Sie das Beispiel eines Dropdowns. Wenn Sie ein Dropdown-Plugin schreiben, könnten Sie versucht sein, in Klick-Handlern zu codieren, vielleicht eine Funktion, um einen Chevron hinzuzufügen, der entweder oben oder unten ist, vielleicht die Klasse des entfalteten Elements zu ändern, das Menü auszublenden, alles hilfreiche Dinge.
Bis Sie eine kleine Änderung vornehmen möchten.
Angenommen, Sie haben ein Menü, das Sie beim Schweben entfalten möchten. Nun haben wir ein Problem. Unser Plugin hat unseren Click-Handler für uns verkabelt. Wir müssen eine Konfigurationsoption hinzufügen, damit es sich in diesem speziellen Fall anders verhält.
In AngularJS schreiben wir kleinere Direktiven. Unsere Dropdown-Richtlinie wäre lächerlich klein. Es kann den gefalteten Zustand beibehalten und Methoden zum Falten (), Entfalten () oder Umschalten () bereitstellen. Diese Methoden würden einfach $ scope.menu.visible aktualisieren, einen Booleschen Wert, der den Status enthält.
Jetzt können wir dies in unserer Vorlage verkabeln:
<a ng-click="toggle()">Menu</a>
<ul ng-show="menu.visible">
...
</ul>
Müssen Sie bei Mouseover aktualisieren?
<a ng-mouseenter="unfold()" ng-mouseleave="fold()">Menu</a>
<ul ng-show="menu.visible">
...
</ul>
Die Vorlage steuert die Anwendung, sodass wir eine Granularität auf HTML-Ebene erhalten. Wenn wir von Fall zu Fall Ausnahmen machen möchten, macht die Vorlage dies einfach.
Closure vs. $ scope
JQuery-Plugins werden in einem Abschluss erstellt. Die Privatsphäre wird innerhalb dieser Schließung gewahrt. Es liegt an Ihnen, Ihre Scope-Kette innerhalb dieses Verschlusses zu halten. Sie haben nur Zugriff auf die von jQuery an das Plugin übergebenen DOM-Knoten sowie auf alle im Closure definierten lokalen Variablen und auf die von Ihnen definierten Globals. Dies bedeutet, dass Plugins ziemlich eigenständig sind. Dies ist eine gute Sache, kann jedoch beim Erstellen einer gesamten Anwendung einschränkend sein. Der Versuch, Daten zwischen Abschnitten einer dynamischen Seite zu übertragen, wird zur Pflicht.
AngularJS hat $ scope-Objekte. Dies sind spezielle Objekte, die von AngularJS erstellt und verwaltet werden und in denen Sie Ihr Modell speichern. Bestimmte Anweisungen erzeugen einen neuen $ scope, der standardmäßig mithilfe der prototypischen Vererbung von JavaScript von seinem umhüllenden $ scope erbt. Auf das $ scope-Objekt kann im Controller und in der Ansicht zugegriffen werden.
Das ist der kluge Teil. Da die Struktur der $ scope-Vererbung in etwa der Struktur des DOM folgt, haben Elemente nahtlosen Zugriff auf ihren eigenen Bereich und alle enthaltenen Bereiche, bis hin zum globalen $ scope (der nicht mit dem globalen Bereich identisch ist).
Dies erleichtert die Weitergabe von Daten und das Speichern von Daten auf einer geeigneten Ebene erheblich. Wenn ein Dropdown-Menü geöffnet wird, muss nur der Dropdown-Bereich $ darüber Bescheid wissen. Wenn der Benutzer seine Einstellungen aktualisiert, möchten Sie möglicherweise den globalen $ -Bereich aktualisieren, und alle verschachtelten Bereiche, die die Benutzereinstellungen abhören, werden automatisch benachrichtigt.
Dies mag kompliziert klingen. Wenn Sie sich erst einmal darin entspannen, ist es wie Fliegen. Sie müssen das $ scope-Objekt nicht erstellen, AngularJS instanziiert und konfiguriert es für Sie, korrekt und angemessen basierend auf Ihrer Vorlagenhierarchie. AngularJS stellt es Ihrer Komponente dann mithilfe der Magie der Abhängigkeitsinjektion zur Verfügung (dazu später mehr).
Manuelle DOM-Änderungen im Vergleich zur Datenbindung
In jQuery nehmen Sie alle Ihre DOM-Änderungen von Hand vor. Sie erstellen programmgesteuert neue DOM-Elemente. Wenn Sie ein JSON-Array haben und es in das DOM einfügen möchten, müssen Sie eine Funktion schreiben, um den HTML-Code zu generieren und einzufügen.
In AngularJS können Sie dies auch tun, es wird jedoch empfohlen, die Datenbindung zu verwenden. Ändern Sie Ihr Modell, und da das DOM über eine Vorlage daran gebunden ist, wird Ihr DOM automatisch aktualisiert, ohne dass ein Eingriff erforderlich ist.
Da die Datenbindung über die Vorlage entweder über ein Attribut oder über die geschweifte Klammer erfolgt, ist dies sehr einfach. Es ist wenig kognitiver Aufwand damit verbunden, so dass Sie es die ganze Zeit tun werden.
<input ng-model="user.name" />
Bindet das Eingabeelement an $scope.user.name
. Durch das Aktualisieren der Eingabe wird der Wert in Ihrem aktuellen Bereich aktualisiert und umgekehrt.
Gleichfalls:
<p>
{{user.name}}
</p>
gibt den Benutzernamen in einem Absatz aus. Es handelt sich um eine Live-Bindung. Wenn der $scope.user.name
Wert aktualisiert wird, wird auch die Vorlage aktualisiert.
Ajax die ganze Zeit
In jQuery ist es ziemlich einfach, einen Ajax-Aufruf zu tätigen, aber Sie können sich das noch zweimal überlegen. Es gibt die zusätzliche Komplexität, über die man nachdenken muss, und ein gutes Stück Skript, das man pflegen muss.
In AngularJS ist Ajax Ihre Standardlösung, und dies geschieht ständig, fast ohne dass Sie es merken. Sie können Vorlagen mit ng-include einschließen. Sie können eine Vorlage mit der einfachsten benutzerdefinierten Direktive anwenden. Sie können einen Ajax-Anruf in einen Dienst einbinden und sich einen GitHub- Dienst oder einen Flickr- Dienst erstellen , auf den Sie mit erstaunlicher Leichtigkeit zugreifen können.
Serviceobjekte vs Hilfsfunktionen
Wenn wir in jQuery eine kleine nicht dom-bezogene Aufgabe ausführen möchten, z. B. das Abrufen eines Feeds von einer API, schreiben wir möglicherweise eine kleine Funktion, um dies in unserem Abschluss zu tun. Das ist eine gültige Lösung, aber was ist, wenn wir häufig auf diesen Feed zugreifen möchten? Was ist, wenn wir diesen Code in einer anderen Anwendung wiederverwenden möchten?
AngularJS gibt uns Serviceobjekte.
Dienste sind einfache Objekte, die Funktionen und Daten enthalten. Sie sind immer Singletons, was bedeutet, dass es nie mehr als einen von ihnen geben kann. Angenommen, wir möchten auf die Stapelüberlauf-API zugreifen, schreiben wir möglicherweise eine, StackOverflowService
die Methoden dafür definiert.
Nehmen wir an, wir haben einen Einkaufswagen. Möglicherweise definieren wir einen ShoppingCartService, der unseren Warenkorb verwaltet und Methoden zum Hinzufügen und Entfernen von Artikeln enthält. Da der Dienst ein Singleton ist und von allen anderen Komponenten gemeinsam genutzt wird, kann jedes Objekt, das benötigt wird, in den Warenkorb schreiben und Daten daraus abrufen. Es ist immer der gleiche Wagen.
Serviceobjekte sind in sich geschlossene AngularJS-Komponenten, die wir nach Belieben verwenden und wiederverwenden können. Sie sind einfache JSON-Objekte, die Funktionen und Daten enthalten. Sie sind immer Singletons. Wenn Sie also Daten in einem Dienst an einem Ort speichern, können Sie diese Daten an einem anderen Ort abrufen, indem Sie denselben Dienst anfordern.
Abhängigkeitsinjektion (DI) vs. Instatiation - auch bekannt als De-Spaghettifizierung
AngularJS verwaltet Ihre Abhängigkeiten für Sie. Wenn Sie ein Objekt möchten, beziehen Sie sich einfach darauf, und AngularJS wird es für Sie besorgen.
Bis Sie anfangen, dies zu verwenden, ist es schwer zu erklären, was für ein enormer Zeitsegen dies ist. In jQuery gibt es nichts Vergleichbares wie AngularJS DI.
DI bedeutet, dass Sie anstatt Ihre Anwendung zu schreiben und zu verkabeln, stattdessen eine Bibliothek von Komponenten definieren, die jeweils durch eine Zeichenfolge gekennzeichnet sind.
Angenommen, ich habe eine Komponente namens 'FlickrService', die Methoden zum Abrufen von JSON-Feeds von Flickr definiert. Wenn ich nun einen Controller schreiben möchte, der auf Flickr zugreifen kann, muss ich mich beim Deklarieren des Controllers nur namentlich auf den 'FlickrService' beziehen. AngularJS kümmert sich darum, die Komponente zu instanziieren und meinem Controller zur Verfügung zu stellen.
Zum Beispiel definiere ich hier einen Service:
myApp.service('FlickrService', function() {
return {
getFeed: function() { // do something here }
}
});
Wenn ich diesen Dienst jetzt nutzen möchte, bezeichne ich ihn einfach mit folgendem Namen:
myApp.controller('myController', ['FlickrService', function(FlickrService) {
FlickrService.getFeed()
}]);
AngularJS erkennt, dass ein FlickrService-Objekt erforderlich ist, um den Controller zu instanziieren, und stellt eines für uns bereit.
Dies macht die Verkabelung sehr einfach und beseitigt so gut wie jede Tendenz zur Spagettierung. Wir haben eine flache Liste von Komponenten, und AngularJS übergibt sie uns nacheinander, sobald wir sie benötigen.
Modulare Servicearchitektur
jQuery sagt sehr wenig darüber aus, wie Sie Ihren Code organisieren sollten. AngularJS hat Meinungen.
AngularJS bietet Ihnen Module, in die Sie Ihren Code einfügen können. Wenn Sie ein Skript schreiben, das beispielsweise mit Flickr kommuniziert, möchten Sie möglicherweise ein Flickr-Modul erstellen, in das alle Ihre Flickr-bezogenen Funktionen eingebunden werden. Module können andere Module (DI) enthalten. Ihre Hauptanwendung ist normalerweise ein Modul, und dies sollte alle anderen Module umfassen, von denen Ihre Anwendung abhängt.
Sie erhalten eine einfache Wiederverwendung von Code. Wenn Sie eine andere Anwendung auf Flickr-Basis schreiben möchten, können Sie einfach das Flickr-Modul einbinden und voila, Sie haben Zugriff auf alle Ihre Flickr-bezogenen Funktionen in Ihrer neuen Anwendung.
Module enthalten AngularJS-Komponenten. Wenn wir ein Modul einfügen, stehen uns alle Komponenten in diesem Modul als einfache Liste zur Verfügung, die durch ihre eindeutigen Zeichenfolgen gekennzeichnet ist . Wir können diese Komponenten dann mithilfe des Abhängigkeitsinjektionsmechanismus von AngularJS ineinander injizieren.
Um zusammenzufassen
AngularJS und jQuery sind keine Feinde. Es ist möglich, jQuery in AngularJS sehr gut zu verwenden. Wenn Sie AngularJS gut verwenden (Vorlagen, Datenbindung, $ scope, Direktiven usw.), werden Sie feststellen, dass Sie viel weniger jQuery benötigen, als Sie sonst benötigen könnten.
Die Hauptsache ist, dass Ihre Vorlage Ihre Anwendung steuert. Hör auf zu versuchen, große Plugins zu schreiben, die alles können. Schreiben Sie stattdessen kleine Anweisungen, die eines tun, und schreiben Sie dann eine einfache Vorlage, um sie miteinander zu verbinden.
Denken Sie weniger an unauffälliges JavaScript als an HTML-Erweiterungen.
Mein kleines Buch
Ich war so begeistert von AngularJS, dass ich ein kurzes Buch darüber geschrieben habe, das Sie gerne online lesen können: http://nicholasjohnson.com/angular-book/ . Ich hoffe es ist hilfreich.