guía de estilo angular2 - propiedad con signo de dólar?

185

Mirando el ejemplo del código angular2 , vemos algunas propiedades públicas con $ sign:

  <....>
  private missionAnnouncedSource = new Subject<string>();
  private missionConfirmedSource = new Subject<string>();
  // Observable string streams
  missionAnnounced$ = this.missionAnnouncedSource.asObservable();
  missionConfirmed$ = this.missionConfirmedSource.asObservable();
  <....>

¿Alguien puede explicar:

  • ¿Por qué se usa $ (¿cuál es la razón detrás de esta notación? siempre se usa para propiedades públicas)?
  • las propiedades públicas se usan pero no los métodos (por ejemplo, missionAnnouncements (), missionConfirmations ()). De nuevo, ¿es una convención para aplicaciones ng2?

¿No parece que hay algo al respecto en la guía de estilo oficial ?

gerasalus
fuente

Respuestas:

265

El sufijo $ (popularizado por Cycle.js ) se usa para indicar que la variable es un Observable . También podría llegar a la guía de estilo oficial, pero todavía no está allí.

Lea más aquí: ¿Qué significa el signo de dólar con sufijo $?

Actualización: Lea más sobre el signo "$" final en el sitio web de Angular aquí: https://angular.io/guide/rx-library#naming-conventions-for-observables

Monfa.red
fuente
44
No llegará a la guía de estilo oficial. Pondré $ 100 en eso.
Eric Bishard
15
Referencia en los documentos angulares: angular.io/guide/rx-library#naming-conventions-for-observables~~V~~singular~~3rd
michelepatrassi
66
@EricBishard Quieres decir 100 $
TabsNotSpaces
1
¿Qué pasa con las promesas?
galki
77
seguridad laboral: haga que el código sea más difícil de entender para el profano.
java-addict301
14

El paradigma $ naming se originó con Andre Saltz y sugiere la pluralización de todos los nombres de variables que contienen observables o flujos.

getAll(): Observable<Zone[]>{
    let zone$ = this.http
      .get(`${this.baseUrl}/zones`, {headers: this.getHeaders()})
      .map(mapZone);
      return zone$;
  }

Otro enfoque es pluralizar nombres de variables que contienen observables o secuencias con un carácter unicode que coincida con la última letra de la palabra. Esto aborda el problema con palabras que no están pluralizadas con una "s".

mouse$ vs mic€

Ninguna de estas convenciones de nomenclatura se encuentra en la guía oficial de estilo angular. El uso de uno u otro (o ninguno) depende completamente de la preferencia personal.

Raquel Diaz
fuente
10
cactu $ vs cactï
BYTE RIDER
Buena referencia! También mira este artículo. Lo que me molesta es encontrar un intento de hacer esto en mi base de código (otros compañeros de trabajo) y hacerlo mal, colocar el sufijo en la variable incorrecta o, peor aún, comenzar la variable con él. También he visto a personas usar esto sin coherencia, en ese caso no tiene ningún sentido. medium.com/@benlesh/…
Eric Bishard
Si va a usarlo, recomendaría las siguientes convenciones de nomenclatura como en este repositorio: github.com/bodiddlie/rxheroes/blob/master/app/effects/hero.ts Y también hacerlo siempre o nunca. Sea consistente por el bien del dios observable.
Eric Bishard
2
fish$vsfish€$
Martin Schneider
11

Actualización : https://angular.io/guide/rx-library#naming-conventions-for-observables

Debido a que las aplicaciones angulares se escriben principalmente en TypeScript, normalmente sabrá cuándo una variable es observable. Aunque el marco angular no aplica una convención de nomenclatura para observables, a menudo verá observables nombrados con un signo "$" al final.

Esto puede ser útil cuando escanea el código y busca valores observables. Además, si desea que una propiedad almacene el valor más reciente de un observable, puede ser conveniente simplemente usar el mismo nombre con o sin el "$".


Original :

Vi que las variables terminaban $al leer el tutorial oficial del héroe:

<div id="search-component">
  <h4>Hero Search</h4>

  <input #searchBox id="search-box" (keyup)="search(searchBox.value)" />

  <ul class="search-result">
    <li *ngFor="let hero of heroes$ | async" >
      <a routerLink="/detail/{{hero.id}}">
        {{hero.name}}
      </a>
    </li>
  </ul>
</div>

Mire de cerca y verá que * ngFor itera sobre una lista llamada heroes$, no héroes .

<li *ngFor="let hero of heroes$ | async" >

$ Es una convención que indica que heroes $ es un Observable, no una matriz.

La mayoría de los casos son que no nos suscribimos a esas variables observables en el componente. Usualmente usamos AsyncPipe para suscribirnos a las variables Observables automáticamente

No lo he encontrado en la Guía de estilo desde que Angular5.1 se lanzó ayer (6 de diciembre de 2017).

Haifeng Zhang
fuente
De la guía de estilo Angular 9heroes: Observable<Hero[]>;
Ricardo Saracino
9

No he visto esto $en la guía de estilo, pero vi que se usa con frecuencia para propiedades públicas que se refieren a observables a los que se puede suscribir.

Günter Zöchbauer
fuente