Ist aufdringliches JavaScript erforderlich, um eine Funktion von AngularJS zu unterstützen?

9

Ich beginne damit, dass ich gerade etwas über AngularJS lerne und diesen Artikel gelesen habe, der für aufdringliches JavaScript als das Richtige einzutreten scheint:

http://www.ng-newsletter.com/posts/angular-for-the-jquery-developer.html

Mein Verständnis ist, dass unauffälliges JavaScript im Allgemeinen als "das Richtige" angesehen wird (was vielleicht umstritten ist, aber außerhalb des Rahmens meiner Frage liegt). Aber ich habe mich gefragt, ob es eine bestimmte Funktion von AngularJS gibt, bei der Ereignisbindungen über Attribute wie ng-click? Gibt es eine Möglichkeit, AngularJS zu verwenden und KEINE Inline-Ereignisbindungen zu verwenden?

Als Referenz: Aufdringliches JavaScript bezieht sich im Allgemeinen darauf, dass Ihre JavaScript-Verknüpfungen im HTML selbst enthalten sind. Unauffälliges JavaScript bezieht sich auf die Verwendung von JavaScript oder anderen Mitteln zum programmgesteuerten Anwenden von Codeverhalten auf das DOM anstelle des Klartext-Markups mit Verweisen auf JavaScript.

Kevin
quelle
Ich habe die Frage umformuliert, um weniger meinungsbasiert zu sein.
Kevin
4
Eigentlich ist dies bereits beantwortet: stackoverflow.com/questions/20906804/…
Kevin

Antworten:

6

Ja.

So funktioniert eckig.

In alten Zeiten (kurz nachdem alle Dinosaurier ausgestorben waren und kurz bevor Smartwatches zu The Next Big Thing wurden) galt unauffälliges JavaScript als The Right Thing. Unauffälliges JavaScript würde mit ihrer Cousine Progressive Enhancement abhängen, und die beiden wurden als das Licht der Welt und das Leuchtfeuer der Güte angekündigt.

Dafür gab es einen Grund. Viele Benutzer verwendeten Browser mit schlechten JavaScript-Engines oder möglicherweise ohne JavaScript-Engines. Oder sie hatten JavaScript deaktiviert. Das Web war in erster Linie für die Übertragung von Hypertext gedacht, und wir sollten unsere Websites für einige nicht unbrauchbar machen, indem wir ihnen JavaScript aufzwingen.

Aus dem gleichen Grund war es sinnvoll, JavaScript aus dem HTML-Code herauszuhalten. HTML sollte rein gehalten werden, dachte man, weil JavaScript etwas war, das Sie später hinzugefügt haben - wenn der Benutzer es erlaubte. Wenn nicht, spiegelte zumindest das HTML-Markup die Semantik dessen wider, was Sie vermitteln wollten.

Dies ist nicht die Philosophie von AngularJS oder die modernsten Richtlinien für die Webentwicklung, da sich die Dinge geändert haben. Wenn wir AngularJS oder ähnliche Frameworks verwenden, verwenden wir das Web, um Anwendungen bereitzustellen , nicht nur Text und Bilder. Webanwendungen sind ohne JavaScript nutzlos, und es macht keinen Sinn, etwas anderes vorzutäuschen. Wir haben also die Fesseln der progressiven Verbesserung abgeworfen, weil (a) wir uns sicher darauf verlassen können, dass alle unsere Benutzer JavaScript aktiviert haben, und (b) es uns nur verlangsamt.

Warum nicht unauffälliges JavaScript, wenn wir keine progressive Verbesserung durchführen? Die Trennung von Anliegen ist ein wunderbares Konzept. Aber es sind sechs von einem oder einem halben Dutzend der anderen: Sie haben entweder HTML mit Verweisen auf JavaScript oder JavaScript mit Verweisen auf HTML (auf jQuery-Weise).

Wenn Sie AngularJS verwenden, werden Sie in Ihrem Code ziemlich bald eine sauberere Trennung von Bedenken feststellen als in anderen Arten der Webentwicklung. Sicher, es gibt Verweise auf JS-Funktionen in Ihrem HTML. Sie können sich jedoch problemlos in HTML bewegen, ohne sich Gedanken über das Brechen von Code machen zu müssen. Ihr JS ist sauber, testbar und basiert nicht auf einem bestimmten DOM. Auf diese Weise können Sie Geschäftslogik besser wiederverwenden UND HTML besser wiederverwenden.

Fazit: Machen Sie sich keine Sorgen. Sie werden sich schnell genug daran gewöhnen. Und widersetzen Sie sich nicht den Dingen, nur weil Ihnen immer gesagt wurde, dass der andere Weg der richtige ist.

Addendum Wenn Sie es das Gefühl , wichtig für Ihre HTML mit dem Standard kompatibel ist, können Sie das verwenden data-Präfix auf Winkel Richtlinien: dh data-ng-click=und data-ng-repeat=und Ihre HTML wird W3C - konform sein. Persönlich mache ich mir darüber nie Sorgen, aber es ist harmlos.

Aaron Greenwald
quelle
3
Gute Erklärung, aber ich bin vorsichtig mit Ihrer Aussage "keine progressive Verbesserung durchführen". Progressive Verbesserung ist weit mehr als das Zurückgreifen auf noJS. Es bietet Retina-Bilder und SVGs mit Fallbacks für diejenigen ohne Retina-Geräte. Es fügt Browsern, die sie unterstützen, subtile Animationen hinzu. Es reduziert die Streaming-Videoqualität auf Geräten mit geringer Bandbreite (wie bei YouTube). Es ist reaktionsschnelles Design. Sie benötigen möglicherweise keine noJS-Fallbacks für Ihre Webanwendung, geben jedoch die progressive Verbesserung nicht auf.
Bryanbraun
1
@ Bryanbraun Sie sind richtig. Punkt genommen.
Aaron Greenwald
Wie macht man unauffällig Angular? Wir sind bereit, Angular einzuführen und haben einen schwerwiegenden Konstruktionsfehler festgestellt. Wir haben ein HTML-Designteam mit 50 Mitarbeitern und ein Entwicklungsteam mit zwei Mitarbeitern. Designer ändern HTML, ohne Nicht-HTML hinzuzufügen. Zwei Entwickler können nicht mit 50 Designern mithalten, wenn wir jede täglich erstellte Vorlage anpassen müssten, selbst nachdem Websites veröffentlicht wurden. Es erscheint auch albern, ganze HTML-Vorlagen in JavaScript-Code wie Webpack zu kompilieren, wenn Sie diese Funktion auf dem Server automatisieren können, um HTML nach Seitenumfang in einer Zip-Datei mit derselben Client-Download-Effizienz zu erfassen, zu komprimieren und zwischenzuspeichern.
Zachary Scott