2016-06-28 58 views
7

Ho appena iniziato a utilizzare Angular 2 e mi sono chiesto perché alcune proprietà come selector e template sono state inserite nei decoratori di componenti e non nelle classi di componenti.Perché Angular 2 utilizza decoratori?

Qual è lo scopo di utilizzare tutti questi decoratori in Angular 2?

risposta

2
  • per rendere più facile per gli strumenti per fornire tutti i tipi di supporto nei modelli come:

    • errore controllando
    • auto-completamento
    • grafica GUI designer
  • Per generare codice dai decoratori che consente:

    • per definire alcune cose più dichiarativo o
    • generare codice diverso a seconda alcune configurazioni (come il imminente offline modello compilatore fa)

codice dovrebbe essere eseguito da usare le espressioni dei risultati potrebbero emettere. I decoratori possono essere facilmente valutati staticamente senza eseguire il codice TypeScript (tranne forse un sottoinsieme semplice e limitato).

0

In generale, i decoratori consentono di eseguire le funzioni. Ad esempio @Component esegue la funzione Component importata da Angular2. Sotto il cofano, tali decoratori definiscono alcuni metadati sulla classe. Questo ti permette di configurare la classe per "contrassegnarla" come un componente. Angular2 è quindi in grado di collegare selettori in modelli a tale classe.

Questo articolo potrebbe dare ulteriori suggerimenti su ciò che accade sotto il cofano:

Si può notare che i decoratori possono applicare a macchina a diversi livelli (classe, di classe, di metodo parametro).

+1

"In generale, i decoratori consentono di eseguire le funzioni". Non è molto utile. I linguaggi di programmazione consentono di "eseguire le funzioni" ... – spinkus

4

Oltre alle risposte specifiche della piattaforma già presenti, mi piacerebbe fare il chip da una visualizzazione più generica. Questa domanda, dal mio parere, è in qualche modo legato alla decisione di scegliere modello decorator per l'eredità (ad es @Component vs extends Component)

Alcuni dei vantaggi di utilizzare decoratori sono:

1. Separazione delle preoccupazioni:

Le informazioni all'interno dei decoratori sono dichiarative, definiscono il comportamento di una classe, molto probabilmente non cambiano nel tempo e vengono utilizzate dal framework. Le proprietà e i campi della classe sono dati specifici della classe, saranno sempre elaborati e frequentemente aggiornati, e solo significativi all'interno della classe stessa. Questi due tipi di dati non devono essere mescolati insieme.

2.Supporta più modifiche

Molte lingue impediscono l'ereditarietà multipla a causa di Diamond problem. D'altra parte, una classe può avere più decoratori per scopi diversi (ad esempio @Component e il deprecato @RouteConfig)

+1

Non compro davvero il secondo argomento. Dove in un Angular2 l'uso dei decoratori allevia un problema di ereditarietà multipla? Sì, i decoratori sono bravi a marcare le lezioni con i metadati. Ma hanno usato em come dichiarazioni di classe/tipo. Le classi/tipi di componenti sono sempre vestite con \ @Component. Moduli sempre con \ @NgModule, e non ha senso mettere \ @Component su qualcosa di diverso da quello che è una classe Component logica ecc. IMHO è una decisione di design dubbia. Per non dire che non ci sono vantaggi - come qualsiasi cosa. – spinkus