È richiesto JavaScript invadente per supportare una funzionalità di AngularJS?

8

Inizierò dicendo che sto solo imparando su AngularJS e stavo leggendo questo articolo, che sembra sostenere JavaScript invadente come la cosa giusta:

link

La mia comprensione è che JavaScript non invadente è generalmente considerato "la cosa giusta" (che è forse discutibile, ma al di fuori dello scopo della mia domanda). Ma mi chiedevo se c'è una particolare funzionalità di AngularJS che richiede che i binding di eventi siano specificati tramite attributi come ng-click ? C'è un modo per usare AngularJS e NON usare i binding di eventi inline?

Per riferimento: Il JavaScript invadente si riferisce generalmente al fatto di avere i tuoi legami JavaScript nel codice HTML stesso. JavaScript non invadente si riferisce all'uso di JavaScript o altri mezzi per applicare a livello di codice comportamenti di codice al DOM piuttosto che al markup in testo semplice con riferimenti a JavaScript.

    
posta Kevin 09.01.2015 - 18:26
fonte

1 risposta

6

Sì.

Ecco come funziona l'angolazione.

In tempi antichi (subito dopo la morte dei dinosauri e un po 'prima che gli smartwatch diventassero The Next Big Thing), JavaScript non invadente era considerato The Right Thing. JavaScript non intrusivo sarebbe uscito con suo cugino, Progressive Enhancement, e loro due furono annunciati come la luce per il mondo e il faro del bene.

C'era una ragione per quello. Un sacco di utenti utilizzavano browser con motori JavaScript poveri o forse senza motori JavaScript. O avevano JavaScript disabilitato. Il web era principalmente per il trasferimento di ipertesti, ci è stato detto, e non dovremmo rendere i nostri siti Web inutilizzabili forzando JavaScript su di essi.

Per lo stesso motivo, aveva senso mantenere JavaScript fuori dall'HTML. L'HTML dovrebbe essere mantenuto puro, si pensava, perché JavaScript era qualcosa che hai aggiunto in seguito - se l'utente lo permetteva. Altrimenti, almeno la marcatura HTML rifletteva la semantica di ciò che stavi cercando di trasmettere.

Questa non è la filosofia di AngularJS o la maggior parte delle moderne linee guida per lo sviluppo web perché le cose sono cambiate. Quando utilizziamo AngularJS o framework simili, utilizziamo il Web per fornire applicazioni , non solo testo e immagini. Le applicazioni Web sono inutili senza JavaScript e non ha senso fingere il contrario. Quindi abbiamo eliminato le catene di Progressive Enhancement perché (a) possiamo tranquillamente contare su tutti i nostri utenti che hanno il javascript abilitato e (b) semplicemente ci rallenta.

Una volta che non stiamo facendo Progressive Enhancement, perché fare JavaScript non invadente? La separazione delle preoccupazioni è un concetto meraviglioso. Ma sono sei di una o mezza dozzina di altri: o hai HTML pieno di riferimenti a JavaScript o hai JavaScript pieno di riferimenti a HTML (il modo jQuery).

Se usi AngularJS, vedrai presto una separazione più chiara delle preoccupazioni nel tuo codice rispetto a quanto hai visto in altri stili di sviluppo web. Certo, ci sono riferimenti a funzioni JS nel tuo codice HTML. Ma puoi spostarti facilmente in HTML senza preoccuparti di rompere il codice, e il tuo JS è pulito, controllabile e non si affida a un DOM molto specifico. Ciò ti consente di riutilizzare meglio la logica aziendale E riutilizzare meglio HTML.

Conclusione: non sottolineo. Ti abituerai abbastanza velocemente. E non resistere alle cose solo perché ti è sempre stato detto che l'altro modo è The Right Way.

Addendum Se ritieni che sia importante che il tuo HTML sia compatibile con lo standard, puoi utilizzare il prefisso data- sulle tue direttive angolari: cioè data-ng-click= e data-ng-repeat= e il tuo HTML sarà conforme a W3C. Personalmente non mi preoccupo mai, ma farlo è innocuo.

    
risposta data 06.05.2015 - 22:46
fonte

Leggi altre domande sui tag