2013-10-28 18 views
11

Le direttive AngularJS hanno ng- come prefisso. Perché insiste a utilizzare un prefisso invece di utilizzare un vero spazio dei nomi xml?Perché AngularJS non consiglia l'uso di spazi dei nomi XML?

Da AngularJS's documentation:

Se si sceglie di utilizzare la vecchia direttiva stile di sintassi ng: allora includono namespace XML in html per rendere IE felice. (Questo è qui per ragioni storiche, e si consiglia non più uso di ng :.)

Utilizzando qualcosa come questo non sembra funzionare:

<html xmlns:ng="http://angularjs.org" ng:app="my-app"> 

come è evidente dal this jsFiddle.

Ma non è consigliabile utilizzarlo e supportarlo solo per ragioni storiche. Qualcuno può indicarmi quali potrebbero essere queste ragioni? Provenendo da uno sfondo Flex, penso che i namespace XML siano fantastici e mi piacerebbe usarli, ma forse ci sono forti ragioni per cui Angular deve adottare l'approccio prefisso?

+0

Questo è curioso per l'utilizzo di AngularJS con SVG, poiché SVG utilizza un parser XML. Ad esempio, data- * e ng- * non sono legali in SVG (anche se alcuni browser potrebbero consentirlo). Tuttavia, ng: * è legale in SVG. http://stackoverflow.com/questions/15532371/do-svg-docs-support-custom-data-attributes –

risposta

4

Mi sono chiesto questo da solo. Prendi in considerazione due progetti indipendenti, "Widget Factory" e "Wombat Framework", che sviluppano ciascuno la direttiva x. È preferred practice precedere i nomi delle direttive per evitare conflitti nello spazio dei nomi, ma in questo caso, ognuno potrebbe ancora definire un wf-x.

Cosa succede se utilizzo <div wf-x="something"></div> in un'applicazione contenente entrambi i moduli? È interessante notare che l'angolare attaccherà entrambi, collegando ciascuno in ordine di priorità discendente. Ma le probabilità che ciò produca un risultato corretto sono basse. Angular genera un errore se entrambe le direttive cercano di aggiungere un controller e la semantica delle due direttive e quello che si aspettano per il valore dell'attributo e della struttura dell'elemento potrebbero facilmente entrare in conflitto l'una con l'altra.

In XML, questo problema è risolto con namespace. <div xmlns:wf1="..." wf1:x="something"></div> o <wf1:x xmlns:wf1="..."></wf1:x> non sono belli, ma descrivono chiaramente quale direttiva intendiamo utilizzare.

Perché il supporto angolare non lo supporta? Gli spazi dei nomi XML sono rari e potrebbero non essere ben supportati in HTML generale e potrebbero esserci problemi tecnici con l'analisi. Le direttive sono supportate nei commenti e nelle classi CSS così come in elementi e attributi, e : dovrebbe essere storpiato in qualche modo in un nome di classe. La risposta più semplice però potrebbe essere che non è ancora un problema abbastanza comune richiedere qualcosa di più avanzato dei prefissi che vediamo oggi in uso. Va notato che l'attuale approccio angolare è quello raccomandato da Web Components. Con l'evolversi di tale standard, mi aspetterei che sia angolare tracciarlo. C'è somediscussion su questo argomento anche nel gruppo Polimero.

+0

A giudicare dalla flessibilità della denominazione degli attributi, la mia ipotesi è che Angular non stia analizzando in modo namespace, ma applichi invece una trasformazione di testo al nome dell'attributo completo, eliminando delimitatori come ":" e applicando camelCasing.Probabilmente raccomandano contro ng: perché potrebbe farti credere che puoi usare gli spazi dei nomi come XML li definisce. –

4

A rischio di sembrare glib, perché angolare è focalizzato sull'estensione della funzionalità html piuttosto che su xml?

+1

Hmm, Questo tipo di ha senso. L'HTML5 non è nemmeno un superset di XML. – Himanshu

Problemi correlati